Uvod
A Seznam velja za eno najbolj prilagodljivih podatkovnih struktur v programskem jeziku Python. Po drugi strani pa je dvodimenzionalni seznam ali 2D seznam, ki ga na splošno imenujemo seznam seznamov, predmet seznama, kjer je vsak element sam seznam. Na primer: [[19, 18, 17], [16, 15, 14], [13, 12, 11]].
Sploščitev seznama seznamov je postopek preoblikovanja dvodimenzionalnega seznama v enodimenzionalni seznam z odstranitvijo gnezdenja vsakega elementa seznama, ki se hrani na seznamu seznamov, to je preoblikovanje [[9, 8, 7], [6 , 5, 4], [3, 2, 1]] do [9, 8, 7, 6, 5, 4, 3, 2, 1].
Postopek ploskanja lahko izvedemo s pomočjo ugnezdenega za zanke, rekurzija, razumevanje seznamov, osnovne funkcije ali uvažanje knjižnic ali paketov v Python o globini in pravilnosti ugnezdenih seznamov.
V tej vadnici bomo delali na različnih metodah za izravnavo ugnezdenih seznamov z uporabo programskega jezika Python. Toda preden začnemo, si poglejmo vrste ugnezdenih seznamov.
Katere so vrste ugnezdenih seznamov?
Kot vemo, Python je šibko tipiziran programski jezik. Zato lahko naletimo na dve vrsti seznamov seznamov. Ti seznami seznamov ali ugnezdeni seznami so naslednji:
- Redni seznam seznamov
- Nepravilen seznam seznamov
Redni seznam seznamov
Vsaka postavka na rednem seznamu seznamov se imenuje podseznam, s čimer se upošteva enotnost vrste elementa. Na primer: [[9, 8, 7], [6, 5, 4], [3, 2, 1]] je običajen seznam seznamov kot [9, 8, 7], [6, 5, 4] , [3, 2, 1] je vrste seznama.
Nepravilen seznam seznamov
rr algoritem
Vsaka postavka na nepravilnem seznamu seznamov se imenuje element podseznama ali element brez seznama (na primer niz ali celo število). Gre torej za nepravilnost glede vrste elementa. Na primer: [[9, 8, 7], [6, 5], 4, 3] je nepravilen seznam seznamov, saj sta [9, 8, 7] in [6, 5] vrst seznamov, medtem ko sta 4 in 3 so tipa int.
Sploščitev seznama seznamov z uporabo ugnezdenih zank
Sploščitev seznama seznamov z ugnezdenimi za Pomoč Loops se šteje za pristop grobe sile za pridobitev ravnega seznama. To metodo lahko izvedemo tako, da izberemo vsak element z dvodimenzionalnega seznama in ga uredimo v enodimenzionalnem seznamu.
Oglejmo si naslednji primer, ki deluje tako za običajne kot tudi za nepravilne sezname seznamov.
primer:
# 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))
Izhod:
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]
Pojasnilo:
V zgornjem primeru smo definirali funkcijo kot flattenlist ki sprejme parameter kot _2dlist . Nato smo uporabili za zanko za ponavljanje elementov ugnezdenega seznama in njihovo dodajanje za ustvarjanje sploščenega seznama. Nato smo definirali ugnezdeni seznam in implementirali flattenlist funkcijo. Posledično se je ugnezdeni seznam uspešno preoblikoval v sploščen seznam.
Sploščitev ugnezdenega seznama z razumevanjem seznama
Sploščitev seznama seznamov s pomočjo razumevanja seznama velja za eleganten pristop za pridobitev ravnega seznama glede na dvodimenzionalni obstoječi seznam. Vendar ta pristop ponuja manj intuitivno rešitev.
Poglejmo naslednji primer.
primer:
# 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)
Izhod:
Genuine list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] Converted list: [10, 20, 30, 40, 50, 60, 70, 80, 90]
Pojasnilo:
V zgornjem primeru smo definirali ugnezdeni seznam in razumevanje seznama. Nato smo jih natisnili za uporabnike. Posledično je bil ugnezdeni seznam uspešno preoblikovan v sploščen seznam.
Sploščitev seznama seznamov z uporabo rekurzivne metode
Za poravnavo dvodimenzionalnega seznama lahko uporabimo tudi rekurzivno metodo. Oglejmo si naslednji primer implementacije rekurzivne metode, da bi sploščili seznam seznamov. Ta izvedba dobro deluje tako za običajne kot za nepravilne sezname seznamov.
primer:
# 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]))
Izhod:
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
Pojasnilo:
V zgornjem primeru smo definirali funkcijo in uporabili če izjava če je dolžina ugnezdenega seznama enaka nič, vrne ugnezdeni seznam.
format niza java
Če je podatkovni element na ničelnem indeksu primerek seznama, potem indeks seznama znova preide v funkcijo in doda naslednjemu indeksu seznama in tako naprej. V nasprotnem primeru bo funkcija vrnila elemente in tako naprej. Končno smo definirali ugnezdeni seznam in izvedli funkcijo. Posledično se je seznam seznamov rekurzivno sploščil.
Uporaba knjižnic Pythona
Uporabimo lahko tudi nekatere knjižnice programskega jezika Python, da sploščimo seznam seznamov. Izvedba teh knjižnic je opisana spodaj:
Sploščitev seznama seznamov z uporabo funkcijskih orodij in knjižnic operaterjev
The operater knjižnica ponuja iconcat() funkcijo za izvajanje temeljne operacije, kot je veriženje. To funkcijo lahko uporabimo kumulativno za podatkovne elemente ugnezdenega seznama, od leve proti desni, kar povzroči zmanjšanje ugnezdenega seznama na sploščen seznam.
Oglejmo si naslednji primer, da bi razumeli njegovo izvedbo.
primer:
# 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, []))
Izhod:
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]
Pojasnilo:
V zgornjem primeru smo uvozili functools knjižnica skupaj z operater knjižnica. Nato smo definirali prazen seznam kot redni seznam . Nato smo definirali funkcijo kot konvo da pretvorite seznam seznamov v sploščen seznam. V tej funkciji smo uporabili za zanke, kjer so elementi z ugnezdenega seznama dodani praznemu seznamu, ki smo ga definirali prej. Kasneje smo definirali ugnezdeni seznam in izvršili funkcijo. Posledično se seznam seznamov uspešno pretvori v sploščen seznam.
Sploščitev seznama seznamov s knjižnico itertools
The itertools knjižnica ponuja veriga() funkcijo, ki nam omogoča idealno pretvorbo ugnezdenega seznama v en sploščen seznam. Ta funkcija obravnava zaporedne serije kot eno samo serijo, tako da jih ponavlja prek iterable, posredovanega kot parameter na serijski način.
Poglejmo naslednji primer:
celo število v niz java
primer:
# 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
Izhod:
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]
Pojasnilo:
V zgornjem primeru smo uvozili itertools knjižnico in ustvarili ugnezdeni seznam. Nato smo uporabili veriga() funkcijo za pretvorbo danega ugnezdenega seznama v sploščen seznam. Končno smo rezultat vrnili uporabnikom. Posledično je seznam seznamov uspešno sploščen.
Sploščitev seznama seznamov s knjižnico NumPy
The NumPy Knjižnica ponuja različne vsakodnevne operacije, vključno z veriženjem dvodimenzionalnih pravilnih nizov po stolpcih ali vrsticah. Uporabili bomo atribut, znan kot stanovanje da bi dobili enodimenzionalni iterator nad nizom za osvojitev cilja. Oglejmo si naslednji primer, da bi razumeli uporabo funkcije concatenate in atributa flat.
primer:
# 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)
Izhod:
The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90]
Pojasnilo:
V zgornjem primeru smo uvozili numpy knjižnico in definiral ugnezdeni seznam. Nato smo uporabili združiti funkcija numpy knjižnica skupaj s svojimi stanovanje atribut za sploščitev elementov ugnezdenega seznama in njihovo združevanje v nov sploščen seznam. Končno smo natisnili rezultat za uporabnike. Tako je seznam seznamov uspešno sploščen.
Uporaba osnovnih funkcij
Nalogo izravnave lahko izvedemo tudi z uporabo nekaterih osnovnih funkcij, ki jih ponuja programski jezik Python.
Sploščitev seznama seznamov s funkcijo vsote
Seštevanje po notranjih seznamih lahko obravnavamo kot drugo rešitev problema. Predamo dva argumenta vsota funkcija: Prvi parameter je ponovljiv , ki je ugnezdeni seznam, drugi parameter pa je začetek ki je prazen seznam za naslednji primer, ki služi kot začetni ravni seznam, kamor bodo dodani podatkovni elementi notranjih podseznamov.
Lahko rečemo, da je ta pristop precej priročen, saj nam ni treba ničesar uvoziti. Vendar je počasnejši od itertools() in veriga() deluje, ko je na ugnezdenem seznamu prisotno veliko število podseznamov.
Poglejmo naslednji primer:
primer:
# 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)
Izhod:
The Nested list: [[10, 20, 30, 40], [50, 60, 70], [80, 90]] The Flattened list: [10, 20, 30, 40, 50, 60, 70, 80, 90]
Pojasnilo:
V zgornjem primeru smo definirali ugnezdeni seznam. Nato smo uporabili vsota() funkcijo in sploščil ugnezdeni seznam v enodimenzionalni seznam ter natisnil dobljeni seznam za uporabnike. Posledično smo seznam seznamov uspešno preoblikovali v ploščati seznam.
Sploščitev seznama seznamov z uporabo ključne besede Lambda
Anonimno funkcijo lahko definiramo s ključno besedo lambda . Seznam regular/irregular lahko posredujemo kot parameter tej anonimni funkciji. Vrednotenje izraza se naredi, da se dobi ploščat enodimenzionalni seznam.
Poglejmo naslednji primer:
primer:
# 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))
Izhod:
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]
Pojasnilo:
V zgornjem primeru smo definirali ugnezdeni seznam. Nato smo uporabili lambda ključna beseda skupaj z argumentom, ki definira izraz za razumevanje seznama. Nato smo jih natisnili za uporabnike. Posledično smo dvodimenzionalni nepravilni seznam uspešno pretvorili v sploščen seznam.
vprašanja za razgovor v jeziku java