logo

Išlyginti sąrašą Python

Pristatymas

A Sąrašas yra laikoma viena lanksčiausių duomenų struktūrų Python programavimo kalboje. Kita vertus, dvimatis sąrašas arba 2D sąrašas, kuris paprastai vadinamas sąrašų sąrašu, yra sąrašo objektas, kuriame kiekvienas elementas yra pats sąrašas. Pavyzdžiui: [[19, 18, 17], [16, 15, 14], [13, 12, 11]].

Sąrašų sąrašo išlyginimas yra dvimačio sąrašo pavertimo vienmačiu sąrašu procesas, išjungiant kiekvieną sąrašo sąraše esantį sąrašo elementą, tai yra transformuojant [[9, 8, 7], [6 , 5, 4], [3, 2, 1]] iki [9, 8, 7, 6, 5, 4, 3, 2, 1].

Išlyginimo procesą galime atlikti naudodamiesi įdėtu dėl kilpos, rekursija, sąrašų supratimas, pagrindinės funkcijos arba bibliotekų ar paketų importavimas į Python, atsižvelgiant į įdėtųjų sąrašų gylį ir reguliarumą.

Šiame vadove mes apsvarstysime įvairius metodus, kaip sulyginti įdėtus sąrašus naudodami Python programavimo kalbą. Tačiau prieš pradėdami supraskime įdėtųjų sąrašų tipus.

Kokie yra įdėtųjų sąrašų tipai?

Kaip mes žinome, Python yra silpno tipo programavimo kalba. Todėl galime susidurti su dviejų tipų sąrašų sąrašais. Šie sąrašų arba įdėtųjų sąrašų sąrašai yra tokie:

  1. Įprastas sąrašų sąrašas
  2. Nereguliarus sąrašų sąrašas

Įprastas sąrašų sąrašas

Kiekvienas reguliaraus sąrašų sąrašo elementas vadinamas posąraščiu, taip stebint elemento tipo vienodumą. Pavyzdžiui: [[9, 8, 7], [6, 5, 4], [3, 2, 1]] yra įprastas sąrašų sąrašas kaip [9, 8, 7], [6, 5, 4] , [3, 2, 1] yra sąrašo tipo.

Nereguliarus sąrašų sąrašas

tinklelio išdėstymas

Kiekvienas netaisyklingo sąrašų sąrašo elementas vadinamas posąraščiu arba ne sąrašo elementu (pavyzdžiui, eilute arba sveikuoju skaičiumi). Taigi elemento tipas yra netaisyklingas. Pavyzdžiui: [[9, 8, 7], [6, 5], 4, 3] yra netaisyklingas sąrašų sąrašas, nes [9, 8, 7] ir [6, 5] yra sąrašų tipų, o 4 ir 3 yra int tipo.

Sąrašų sąrašo išlyginimas naudojant Neded for Loops

Sąrašų sąrašo išlyginimas naudojant įdėtą dėl Loops pagalba laikoma žiaurios jėgos metodu, siekiant gauti vienodą sąrašą. Šį metodą galime atlikti pasirinkdami kiekvieną elementą iš dvimačio sąrašo ir sudėliodami jį į vienmatį sąrašą.

Panagrinėkime šį pavyzdį, kuris tinka tiek įprastiems, tiek netaisyklingiems sąrašų sąrašams.

Pavyzdys:

 # defining the function def flattenlist(_2dlist): # defining an empty list flatlist = [] # Iterating through the outer list for item in _2dlist: if type(item) is list: # If the item is of the list type, iterating through the sub-list for element in item: flatlist.append(element) else: flatlist.append(item) return flatlist # defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] print('Genuine List:', nestedlist) print('Converted Flat List:', flattenlist(nestedlist)) 

Išvestis:

 Genuine List: [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] Converted Flat List: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 

Paaiškinimas:

Aukščiau pateiktame pavyzdyje apibrėžėme funkciją kaip išlyginamasis sąrašas kuris priima parametrą kaip _2dlist . Tada naudojome dėl kilpa, kad pakartotumėte įdėtojo sąrašo elementus ir pridėkite juos, kad būtų sukurtas suplokštintas sąrašas. Tada apibrėžėme įdėtą sąrašą ir įgyvendinome išlyginamasis sąrašas funkcija. Dėl to įdėtas sąrašas sėkmingai transformuotas į išlygintą sąrašą.

Įdėto sąrašo išlyginimas naudojant sąrašo supratimą

Sąrašų sąrašo išlyginimas Sąrašo supratimo pagalba laikomas elegantišku metodu norint gauti vienodą sąrašą, atsižvelgiant į esamą dvimatį sąrašą. Tačiau šis metodas siūlo ne tokį intuityvų sprendimą.

Panagrinėkime toliau pateiktą pavyzdį.

Pavyzdys:

 # defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90]] # list comprehension flatlist = [element for sub_list in nestedlist for element in sub_list] print('Genuine list:', nestedlist) print('Converted list:', flatlist) 

Išvestis:

 Genuine list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] Converted list: [10, 20, 30, 40, 50, 60, 70, 80, 90] 

Paaiškinimas:

Aukščiau pateiktame pavyzdyje apibrėžėme įdėtą sąrašą ir sąrašo supratimą. Tada mes juos atspausdinome vartotojams. Dėl to įdėtas sąrašas sėkmingai paverstas suplokštuoju sąrašu.

Sąrašų sąrašo išlyginimas naudojant rekursinį metodą

Taip pat galime naudoti rekursinį metodą, kad išlygintume dvimatį sąrašą. Panagrinėkime šį pavyzdį, įgyvendinantį rekursyvųjį metodą, kad sulygintume sąrašų sąrašą. Šis diegimas puikiai tinka įprastiems ir nereguliariems sąrašų sąrašams.

Pavyzdys:

 # defining a function def flattenlist(nestedlist): if len(nestedlist) == 0: return nestedlist if isinstance(nestedlist[0], list): return flattenlist(nestedlist[0]) + flattenlist(nestedlist[1:]) return nestedlist[:1] + flattenlist(nestedlist[1:]) print(flattenlist([[10, 20, 30, 40], [50, 60, 70], [80, 90], 100])) 

Išvestis:

 [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 

Paaiškinimas:

Aukščiau pateiktame pavyzdyje apibrėžėme funkciją ir panaudojome an jeigu pareiškimas nurodydami, ar įdėtojo sąrašo ilgis lygus nuliui, tada grąžinkite įdėtą sąrašą.

string.formatas java

Jei nulinio indekso duomenų elementas yra sąrašo pavyzdys, sąrašo indeksas vėl patenka į funkciją ir pridedamas prie kito sąrašo indekso ir pan. Kitu atveju funkcija grąžins elementus ir pan. Pagaliau apibrėžėme įdėtą sąrašą ir vykdėme funkciją. Dėl to sąrašų sąrašas rekursyviai suplokštėjo.

Python bibliotekų naudojimas

Taip pat galime naudoti kai kurias „Python“ programavimo kalbos bibliotekas, kad išlygintume sąrašų sąrašą. Šių bibliotekų diegimas aprašytas toliau:

Sąrašų sąrašo išlyginimas naudojant funkcines priemones ir operatorių bibliotekas

The operatorius biblioteka teikia iconcat () funkcija atlikti pagrindinę operaciją, pvz., sujungimą. Šią funkciją galime taikyti bendrai įdėtojo sąrašo duomenų elementams iš kairės į dešinę, todėl įdėtasis sąrašas sumažinamas iki išlyginto sąrašo.

Panagrinėkime šį pavyzdį, kad suprastume jo įgyvendinimą.

Pavyzdys:

 # importing the required libraries import operator import functools regularlist = [] # Converting the list of lists into a flattened one. def convo(nestedlist): for element in nestedlist: if type(element) is list: regularlist.append(element) else: regularlist.append([element]) return regularlist twoDlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100], 110] regular2Dlist = convo(twoDlist) print('Given List:', twoDlist) print('Converted list:', functools.reduce(operator.iconcat, regular2Dlist, [])) 

Išvestis:

 Given List: [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100], 110] Converted list: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110] 

Paaiškinimas:

Aukščiau pateiktame pavyzdyje mes importavome funkcinės priemonės biblioteka kartu su operatorius biblioteka. Tada apibrėžėme tuščią sąrašą kaip nuolatinis sąrašas . Tada apibrėžėme funkciją kaip convo kad paverstumėte sąrašų sąrašą į suplotą sąrašą. Šioje funkcijoje mes panaudojome dėl kilpa, kur elementai iš įdėtojo sąrašo pridedami prie tuščio sąrašo, kurį apibrėžėme anksčiau. Vėliau apibrėžėme įdėtą sąrašą ir vykdome funkciją. Dėl to sąrašų sąrašas sėkmingai konvertuojamas į išlygintą sąrašą.

Sąrašų sąrašo išlyginimas naudojant itertools biblioteką

The iterto įrankiai biblioteka teikia grandinėlė () funkcija, leidžianti idealiai paversti įdėtą sąrašą į vieną išlygintą sąrašą. Ši funkcija nuoseklias serijas traktuoja kaip vieną seriją, kartodama jas per iteraciją, kuri buvo perduodama kaip parametras nuosekliu būdu.

Panagrinėkime šį pavyzdį:

Pavyzdys:

 # importing the itertools library import itertools # defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] flattenlist = list(itertools.chain(*nestedlist)) print('The nested list:', nestedlist) print('The flattened list:', flattenlist 

Išvestis:

java logotipas
 The nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90, 100]] The flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 

Paaiškinimas:

Aukščiau pateiktame pavyzdyje mes importavome iterto įrankiai biblioteką ir sugeneravo įdėtą sąrašą. Tada mes panaudojome grandinė () funkcija konvertuoti pateiktą įdėtą sąrašą į išlygintą sąrašą. Pagaliau mes grąžinome rezultatus vartotojams. Dėl to sąrašų sąrašas sėkmingai išlyginamas.

Sąrašų sąrašo išlyginimas naudojant NumPy biblioteką

The NumPy biblioteka teikia įvairias kasdienes operacijas, įskaitant dvimačių įprastų masyvų sujungimą pagal stulpelius arba eilutes. Mes naudosime atributą, žinomą kaip butas tam, kad masyve pasiektų vienmatį iteratorių, kuris įveiktų tikslą. Panagrinėkime šį pavyzdį, kad suprastume sujungimo funkcijos ir plokščiojo atributo naudojimą.

Pavyzdys:

 # importing the library import numpy # defining the nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90]] # using the concatenate function along with the flat attribute flattenlist = list(numpy.concatenate(nestedlist).flat) print('The Nested list:', nestedlist) print('The Flattened list:', flattenlist) 

Išvestis:

 The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90] 

Paaiškinimas:

Aukščiau pateiktame pavyzdyje mes importavome nelygus biblioteką ir apibrėžė įdėtą sąrašą. Tada mes panaudojome sujungti funkcija nelygus biblioteka kartu su ja butas atributas, kad išlygintumėte įdėtojo sąrašo elementus ir sujungtumėte juos į naują išlygintą sąrašą. Pagaliau vartotojams atspausdinome rezultatą. Taigi sąrašų sąrašas sėkmingai suplokštinamas.

Pagrindinių funkcijų naudojimas

Taip pat galime atlikti išlyginimo užduotį naudodami kai kurias pagrindines Python programavimo kalbos teikiamas funkcijas.

Sąrašų sąrašo išlyginimas naudojant sumos funkciją

Vidinių sąrašų apibendrinimą galime laikyti dar vienu problemos sprendimu. Pateikiame du argumentus suma funkcija: pirmasis parametras yra kartojamas , kuris yra įdėtas sąrašas, o antrasis parametras yra pradėti kuris yra negaliojantis tolesnio atvejo sąrašas, kuris naudojamas kaip pradinis plokštusis sąrašas, į kurį bus įtraukti vidinių antrinių sąrašų duomenų elementai.

Galime pasakyti, kad šis metodas yra gana patogus, nes mums nieko nereikia importuoti. Tačiau jis yra lėtesnis nei iterto įrankiai () ir grandinė () veikia, kai įdėtame sąraše yra daug antrinių sąrašų.

Panagrinėkime tokį pavyzdį:

Pavyzdys:

base64 dekodavimas js
 # defining a nested list nestedlist = [[10, 20, 30, 40], [50, 60, 70], [80, 90]] # using the sum function flattenlist = sum(nestedlist, []) print('The Nested list:', nestedlist) print('The Flattened list:', flattenlist) 

Išvestis:

 The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90] 

Paaiškinimas:

Aukščiau pateiktame pavyzdyje apibrėžėme įdėtą sąrašą. Tada mes panaudojome suma() funkciją ir išlygino įdėtą sąrašą į vienmatį sąrašą ir atspausdino gautą sąrašą vartotojams. Todėl sėkmingai pakeitėme sąrašų sąrašą į vientisą sąrašą.

Sąrašų sąrašo išlyginimas naudojant Lambda raktinį žodį

Anoniminę funkciją galime apibrėžti naudodami raktinį žodį lambda . Įprastą / nereguliarų sąrašą galime perduoti kaip šios anoniminės funkcijos parametrą. Išraiškos įvertinimas atliekamas siekiant gauti plokščią vienmatį sąrašą.

Panagrinėkime tokį pavyzdį:

Pavyzdys:

 # Defining the nested list nestedlist = [[10, 20, 30], [30, 50, 60], [40, 60, 70], 70] # Using lambda parameters: expression flattenlist = lambda nestedlist:[item for element in nestedlist for item in flattenlist(element)] if type(nestedlist) is list else [nestedlist] print('The Nested list:', nestedlist) print('The Flattened List:', flattenlist(nestedlist)) 

Išvestis:

 The Nested list: [[10, 20, 30], [30, 50, 60], [40, 60, 70], 70] The Flattened List: [10, 20, 30, 30, 50, 60, 40, 60, 70, 70] 

Paaiškinimas:

Aukščiau pateiktame pavyzdyje apibrėžėme įdėtą sąrašą. Tada mes panaudojome lambda raktinį žodį kartu su argumentu, apibrėžiančiu sąrašo supratimo išraišką. Tada mes juos atspausdinome vartotojams. Dėl to mes sėkmingai konvertavome dvimatį netaisyklingą sąrašą į išlygintą sąrašą.