logo

Lista egyesítése Pythonban

Bevezetés

A Lista a Python programozási nyelv egyik legrugalmasabb adatstruktúrája. Másrészt a kétdimenziós lista vagy 2D lista, amelyet általában listák listájának neveznek, egy olyan lista objektuma, ahol minden elem maga egy lista. Például: [[19, 18, 17], [16, 15, 14], [13, 12, 11]].

A listák simítása egy kétdimenziós lista egydimenziós listává történő átalakításának folyamata a listák listájában lévő összes listaelem beágyazásának megszüntetésével, vagyis a [[9, 8, 7], [6 , 5, 4], [3, 2, 1]] - [9, 8, 7, 6, 5, 4, 3, 2, 1].

A lapítási folyamatot a beágyazott segítségével tudjuk elvégezni számára ciklusok, rekurzió, listamegértések, alapfunkciók, vagy a Pythonban lévő könyvtárak vagy csomagok importálása a beágyazott listák mélysége és szabályossága alapján.

Ebben az oktatóanyagban különféle módszereket dolgozunk ki a beágyazott listák egyesítésére a Python programozási nyelv használatával. Mielőtt azonban elkezdenénk, ismerjük meg a beágyazott listák típusait.

Melyek a beágyazott listák típusai?

Mint tudjuk, Piton egy gyengén tipizált programozási nyelv. Ezért kétféle listával találkozhatunk. Ezek a listák vagy beágyazott listák a következők:

  1. Listák szokásos listája
  2. Rendhagyó listák listája

Rendszeres listák listája

A listák reguláris listájában minden elemet Allistának nevezünk, így figyelve az elem típusának egységességét. Például: [[9, 8, 7], [6, 5, 4], [3, 2, 1]] a [9, 8, 7], [6, 5, 4] listák szokásos listája. , [3, 2, 1] lista típusú.

Rendhagyó listák listája

rendszer szoftver

A listák szabálytalan listájában minden elemet allistaként vagy nem listás elemként (például karakterláncként vagy egész számként) neveznek. Így az elem típusát illetően szabálytalanság van. Például: [[9, 8, 7], [6, 5], 4, 3] a listák szabálytalan listája, mivel a [9, 8, 7] és a [6, 5] listatípusok, míg a 4 3 pedig int típusú.

A listák listájának simítása a Nested for Loops segítségével

A listák listájának simítása a beágyazott elemekkel számára A Loops segítsége brute force megközelítésnek számít egy lapos lista eléréséhez. Ezt a módszert úgy hajthatjuk végre, hogy minden elemet kiválasztunk a Kétdimenziós listából, és egydimenziós listába rendezzük.

Tekintsük a következő példát, amely mind a normál, mind a nem szabályos listák esetében működik.

Példa:

 # 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)) 

Kimenet:

 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] 

Magyarázat:

A fenti példában egy függvényt definiáltunk így flattenlist amely olyan paramétert vesz fel, mint _2dlist . Akkor használtuk számára ciklust a beágyazott lista elemeinek iterálásához és hozzáfűzéséhez egy lapított lista létrehozásához. Ezután meghatároztuk a beágyazott listát, és megvalósítottuk a flattenlist funkció. Ennek eredményeként a beágyazott lista sikeresen átalakult lapos listává.

A beágyazott lista kiegyenlítése listaértelmezés segítségével

A listák listájának egyengetése a listaértés segítségével elegáns megközelítésnek tekinthető egy lapos lista létrehozásához, amely egy kétdimenziós létező listától függ. Ez a megközelítés azonban kevésbé intuitív megoldást kínál.

Tekintsük a következő példát.

Példa:

 # 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) 

Kimenet:

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

Magyarázat:

A fenti példában egy beágyazott listát és listaértelmezést határoztunk meg. Ezt követően kinyomtattuk őket a felhasználók számára. Ennek eredményeként a beágyazott lista sikeresen átalakult lapos listává.

A listák listájának simítása rekurzív módszerrel

Használhatjuk a rekurzív módszert is a kétdimenziós lista egyengetésére. Tekintsük a következő példát a rekurzív metódus megvalósítására a listák listájának simítása érdekében. Ez a megvalósítás jól működik normál és szabálytalan listák esetén is.

Példa:

 # 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])) 

Kimenet:

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

Magyarázat:

A fenti példában definiáltunk egy függvényt és használtunk egy ha nyilatkozat kimondja, ha a beágyazott lista hossza nulla, akkor adja vissza a beágyazott listát.

hackelés feldolgozás

Ha a nulladik index adateleme egy lista példánya, akkor a listaindex ismét bemegy a függvénybe, és hozzáadódik a lista következő indexéhez és így tovább. Ellenkező esetben a függvény visszaadja az elemeket és így tovább. Végül meghatároztuk a beágyazott listát és végrehajtottuk a függvényt. Ennek eredményeként a listák listája rekurzívan ellaposodott.

Python könyvtárak használata

Használhatunk néhány Python programozási nyelvi könyvtárat is a listák listájának simítására. Ezeknek a könyvtáraknak a megvalósítását az alábbiakban ismertetjük:

A listák listájának simítása a függvényeszközök és operátorkönyvtárak segítségével

A operátor könyvtár biztosítja a ikonmacska() függvény az alapvető műveletek, például az összefűzés végrehajtásához. Ezt a függvényt kumulatívan alkalmazhatjuk egy beágyazott lista adatelemeire, balról jobbra, aminek eredményeként a beágyazott lista lapos listává redukálható.

Tekintsük a következő példát, hogy megértsük a megvalósítását.

Példa:

 # 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, [])) 

Kimenet:

 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] 

Magyarázat:

A fenti példában importáltuk a funkcionális eszközök könyvtárral együtt a operátor könyvtár. Ezután egy üres listát definiáltunk a rendszeres lista . Ezután definiáltunk egy függvényt, mint convo a listák listájának lapított listává alakításához. Ebben a függvényben a számára ciklus, ahol a beágyazott lista elemei hozzáfűződnek a korábban definiált üres listához. Később definiáltuk a beágyazott listát és végrehajtottuk a függvényt. Ennek eredményeként a listák listája sikeresen simított listává alakul.

A listák listájának simítása az itertools könyvtár használatával

A itertools könyvtár biztosítja a lánc() függvény, amellyel ideális esetben egy beágyazott listát egyetlen lapított listává alakíthatunk át. Ez a függvény az egymást követő sorozatokat egyetlen sorozatként kezeli úgy, hogy a paraméterként átadott iterálható soros módon iterálja őket.

Tekintsük a következő példát:

bináris keresés algoritmusa

Példa:

 # 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 

Kimenet:

 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] 

Magyarázat:

A fenti példában importáltuk a itertools könyvtárat, és létrehozott egy beágyazott listát. Ezután használtuk a lánc() függvényt az adott beágyazott lista lapos listává alakításához. Végre visszaküldtük az eredményt a felhasználóknak. Ennek eredményeként a listák listája sikeresen kiegyenlítésre került.

A listák listájának egyengetése a NumPy könyvtár használatával

A NumPy A könyvtár különféle mindennapi műveleteket biztosít, beleértve a kétdimenziós szabályos tömbök oszloponkénti vagy soronkénti összefűzését. A néven ismert attribútumot fogjuk használni lakás annak érdekében, hogy egy egydimenziós iterátort kapjon a tömbön, hogy meghódítsa a célt. Tekintsük a következő példát, hogy megértsük az összefűzés függvény és a flat attribútum használatát.

Példa:

 # 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) 

Kimenet:

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

Magyarázat:

A fenti példában importáltuk a zsibbadt könyvtárat, és definiált egy beágyazott listát. Ezután használtuk a összekapcsol funkciója zsibbadt könyvtárat a vele együtt lakás attribútumot a beágyazott lista elemeinek egyesítéséhez, és összefűzéséhez egy új lapos listához. Végre kinyomtattuk az eredményt a felhasználók számára. Így a listák listája sikeresen simított.

Az alapfunkciók használata

A simítási feladatot a Python programozási nyelv által biztosított néhány alapvető funkció felhasználásával is elvégezhetjük.

A listák listájának egyengetése az összeg függvény segítségével

A probléma másik megoldásának tekinthetjük a belső listák összegzését. Két érvet adunk át a összeg függvény: Az első paraméter az iterálható , amely egy beágyazott lista, a második paraméter pedig Rajt amely egy üres lista a következő esethez, amely a kezdeti lapos listaként szolgál, ahol a belső allisták adatelemei hozzáadódnak.

Azt mondhatjuk, hogy ez a megközelítés meglehetősen kényelmes, mivel nem kell semmit importálnunk. Ez azonban lassabb, mint a itertools() és lánc() akkor működik, ha nagyszámú allista van a beágyazott listában.

adatkapcsolati réteg protokollok

Tekintsük a következő példát:

Példa:

 # 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) 

Kimenet:

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

Magyarázat:

A fenti példában definiáltuk a beágyazott listát. Ezután használtuk a összeg() függvényt, és a beágyazott listát egydimenziós listává simította, és az eredményül kapott listát kinyomtatta a felhasználók számára. Ennek eredményeként a listák listáját sikeresen egységes listává alakítottuk.

A listák listájának simítása Lambda kulcsszó használatával

A kulcsszó használatával anonim függvényt definiálhatunk lambda . Ennek az anonim függvénynek paraméterként átadhatjuk a reguláris/irreguláris listát. A kifejezés kiértékelése egy lapos egydimenziós lista létrehozása érdekében történik.

Tekintsük a következő példát:

Példa:

 # 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)) 

Kimenet:

 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] 

Magyarázat:

A fenti példában egy beágyazott listát definiáltunk. Ezután használtuk a lambda kulcsszó, valamint egy argumentum, amely a lista megértéséhez szükséges kifejezést határozza meg. Ezt követően kinyomtattuk őket a felhasználók számára. Ennek eredményeként sikeresen konvertáltuk a kétdimenziós szabálytalan listát lapított listává.