Listák (lista). Függvények és módszerek listázása

15.05.2022

Ma egy olyan adattípusról fogok beszélni, mint pl listákon, a rajtuk végzett műveletek és módszerek, a listagenerátorokról és a listák használatáról.

Mik azok a listák?

A Pythonban a listák tetszőleges típusú objektumok rendezett, változtatható gyűjteményei (hasonlóan egy tömbhöz, de a típusok eltérőek lehetnek).

A listák használatához létre kell hozni azokat. A lista létrehozásának többféle módja van. Például bármilyen iterálható objektumot (például ) feldolgozhat a beépített funkcióval lista:

>>> lista ("lista") ["lista"]

Listát is létrehozhat literál használatával:

>>> s = # Üres lista >>> l = [ "s" , "p" , [ "isok" ], 2 ] >>> s >>> l ["s", "p", ["isok" "], 2]

Amint a példából látható, a lista tetszőleges számú objektumot tartalmazhat (beleértve a beágyazott listákat is), vagy nem tartalmazhat semmit.

És egy másik módja a lista létrehozásának listagenerátorok. A listagenerátor egy módja annak, hogy új listát készítsünk úgy, hogy egy kifejezést alkalmazunk egy sorozat minden elemére. A listagenerátorok nagyon hasonlítanak a hurokhoz.

>>> c = [ c * 3 c-hez a "listában" ] >>> c ["lll", "iii", "sss", "ttt"]

Bonyolultabb listagenerátor kialakítás is lehetséges:

>>> c = [ c * 3 c a "listában", ha c != "i" ] >>> c ["lll", "sss", "ttt"] >>> c = [ c + d for c a "listában", ha c != "i" d a "spam"-ben, ha d != "a" ] >>> c ["ls", "lp", "lm", "ss", "sp", "sm", "ts", "tp", "tm"]

Bonyolult esetekben azonban jobb egy szabályos for ciklust használni a listák létrehozásához.

Függvények és módszerek listázása

Létrehozva létrehozva, most tennie kell valamit a listával. A listákhoz alapvető és listás módszerek állnak rendelkezésre.

"Módszerek listázása" táblázat

MódszerMit csinál
list.append(x)Hozzáad egy elemet a lista végéhez
list.kiterjesztés(L)Kibővíti a listát az L lista összes elemének hozzáfűzésével
list.insert(i, x)Az x értéket beszúrja az i-edik elembe
list.remove(x)Eltávolítja a lista első elemét, amelynek x értéke van. ValueError, ha nem létezik ilyen elem
list.pop([én])Eltávolítja az i-edik elemet, és visszaadja. Ha az index nincs megadva, az utolsó elem eltávolításra kerül
list.index(x, ])Az első x értékű elem pozícióját adja vissza (keresés az elejétől a végéig)
list.count(x)Az x értékű elemek számát adja vissza
list.sort() Függvény alapján rendezi a listát
lista.fordítva() Kibővíti a listát
lista.másolat() A lista sekély másolata
lista.tiszta() Törli a listát

Megjegyzendő, hogy a lista metódusok a -val ellentétben magát a listát módosítják, ezért a végrehajtás eredményét nem kell ebbe a változóba írni.

>>> l = [ 1 , 2 , 3 , 5 , 7 ] >>> l . sort() >>> l >>> l = l . sort() >>> print(l) Nincs

És végül, példák a listákkal való munkára:

>>> a = [ 66.25 , 333 , 333 , 1 , 1234.5 ] >>> print ( a . count ( 333 ), a . count ( 66.25 ), a . count ( "x" )) 2 1 0 >>> a. beszúrni (2 , - 1 ) >>> a . hozzáfűzés (333 ) >>> a >>> a. index (333 ) 1 >>> a . eltávolítás (333 ) >>> a >>> a. fordított() >>>a >>> a. sort() >>> a [-1, 1, 66.25, 333, 333, 1234.5]

Alkalmanként a termelékenység növelése érdekében a listákat sokkal kevésbé rugalmasakra cserélik

Képzeljünk el egy helyzetet – ki kell bontania egy lista összes elemét, és mindegyiket hozzá kell rendelnie a saját változójához. Például van egy listánk, amely leír egy személyt, és a következő elemeket tartalmazza:

Person_data = ["János", "Smith", 23, "programozó"]

Felhasználónév, felhasználói_vezetéknév, felhasználói_kor, felhasználói_foglalkozás = személy_adat

Ezt követően minden létrehozott változót külön-külön használhatunk.

Felhívjuk figyelmét, hogy a létrehozott változók számának meg kell egyeznie a lista elemeinek számával, ellenkező esetben hibaüzenetet kap.

A generátorok használata Pythonban.

Generátorok listázása Pythonban egysoros konstrukcióknak nevezzük, amelyek lehetővé teszik új listák létrehozását.

A listagenerátorok szintaxisa a következő:

# a legegyszerűbb generátor new_list =

Ennek eredményeként a new_list 0-tól 9-ig terjedő számokat fog tartalmazni. Nyilvánvaló, hogy egy ilyen lista létrehozásához nincs szükség generátorra. Csak a range() függvényt kell használnia

# bonyolultabb példa szó = "hello" new_list =

Most a new_list így fog kinézni:

["Helló"]

A listagenerátorokba is beszúrhat egy if-konstrukciót:

# Hozzon létre egy listát azokból a számokból, amelyek három new_list = többszörösei

Ennek eredményeként a következőket kapjuk:

Végül több listát és változót is használhat a generátorban:

# kártyapakli létrehozása listagenerátor segítségével # öltönyök = "HDCS" # rangsorolás = "23456789TJQKA" # pakli pakli generálása =

A következő eredményt kapjuk:

Képzeld el, mennyi időt spóroltunk meg azzal, hogy több hurok helyett csak egy sort írtunk.

Hogyan lehet elemeket kivonni az allistákból a Pythonban.

Gyakran előfordul olyan helyzet is, amikor egy lista allistáiból kell elemeket kinyerni.

Például a következő listánk van:

Külső = [, , ]

A feladat egy külön lista létrehozása, amely az allisták összes elemét tartalmazza ebből a listából. Ezt a feladatot ugyanazzal a listagenerátorral hajthatja végre:

Új_lista =

Így kapunk egy listát az összes elemmel:

Ez minden mára. Sok sikert a tanuláshoz Piton!

| |

A listaértelmezések lehetővé teszik, hogy gyorsan listát hozzon létre a meglévő listákból. Generátor használatával listát készíthet bármilyen iterálható adattípus (például karakterláncok vagy sorok) alapján.

Ennek eredményeként a ciklus ugyanazt a listát hozza létre:

["8", "h", "o", "s", "t"]

Feltételes kifejezések a listagenerátorokban

A listagenerátorok feltételes kifejezéseket használhatnak a meglévő listák vagy más szekvenciális adattípusok módosítására, ami új listát eredményez.

Nézzünk egy generátort if utasítással:

fish_tuple = ("blowfish", "bohóchal", "harcsa", "polip")
fish_list =
nyomtatás (hallista)

A lista a fish_tuple sort használja egy új fish_list alapjaként.

A for és in kulcsszavak ugyanúgy használatosak, mint az előző méretben. Ezenkívül a generátor tartalmaz egy if utasítást, ami miatt kizárja a „polip” karakterláncot a listából.

Kérdezze le a fish_list tartalmát, és győződjön meg arról, hogy az összes fish_tuple elemet tartalmazza, kivéve a 'polip' elemet.

["blowfish", "bohóchal", "harcsa"]

Amint látja, egy feltételes kifejezés használatával kizárhat egy bizonyos elemet az új listából.

Most nézzünk meg egy másik példát, amely matematikai műveleteket, számokat és a range() metódust használ.


nyomtatás(szám_lista)

Olvassa el még:

Az új számlista minden páros elem négyzetes értékeit fogja tartalmazni a 0-9 tartományban. Az eredmény egy ilyen lista lesz:

Nézzük meg ezt a példát lépésről lépésre. Ha x helyett x ** 2 helyett csak x-et használunk x helyett, a lista így fog kinézni:

number_list =
nyomtatás(szám_lista)

Ezt követően egy feltételes kifejezést adtunk a generátorhoz:

number_list =
nyomtatás(szám_lista)

Az if utasítás minden páratlan számot törölt a listából.

Most már csak egy operátort kell hozzáadni, amely az összes elemet négyzetre helyezi:

number_list =
nyomtatás(szám_lista)

Most a lista minden eleme négyzetes lesz.

Használhat beágyazott if utasításokat is a generátorokban:

number_list =
nyomtatás(szám_lista)

A Python programozási nyelv listagenerátorai hatékony eszközt jelentenek a különféle adathalmazokkal való munkavégzéshez. Leggyakrabban ezeket a konstrukciókat a listákkal való kényelmesebb interakcióhoz használják, nemcsak létrehozásukat, hanem módosításukat is biztosítva. Annak ellenére, hogy bizonyos esetekben meg lehet csinálni generátorok nélkül is, megfelelő használatuk nagyban leegyszerűsíti az összetett algoritmusok megvalósítását.

Egyszerű generáció

A legtöbb egyszerű módon a létrehozás a szükséges értékek vagy objektumok szokásos hozzárendelése. Abban az esetben, ha a sorozatnak kevés eleme van, egyszerűen felsorolhatók egymás után. De ha számuk meghaladja a tucatot, komolyan el kell gondolkodnia a listagenerátor használatán. Ez a kialakítás biztosítja az automatikus feltöltést bizonyos utasítások alapján.

A következő példa bemutatja, hogyan hozhat létre számlistát Python generátor segítségével. Az i változó az adatobjektum aktuális elemére való hivatkozás. A tartományfüggvény itt két argumentumot vesz fel, amelyek beállítják az egész számok generált sorozatának határait. Az információk nyomtatási módszerrel jelennek meg a képernyőn.

>>> adatok = >>> nyomtatás(adat)

A Python 3 listagenerátorai nem csak numerikus értékekkel működnek. Ahogy a következő példa mutatja, átadhat egy karakterláncot vagy egy hivatkozást argumentumként a generátornak.

>>> adatok = >>> print(data) ["p", "y", "t", "h", "o", "n"]

A kód végrehajtásának eredményeként létrejön az eredeti karakterláncban szereplő karakterek listája. Az eredményül kapott adathalmazt az előző példához hasonlóan a már jól ismert nyomtatási módszerrel jeleníthetjük meg a képernyőn.

Generátor állapottal

A Pythonban a listák létrehozásának egyik gyakran használt módja a feltétel megadása. Az előző példák egy meglehetősen triviális megközelítést mutattak be a lista generátor segítségével történő feltöltésére. Python nyelvi konstrukciós adatok lehetővé teszi bizonyos feltételek beállítását egy ilyen művelet végrehajtásához. Például van egy feladat, hogy csak páros számokat helyezzen át a listába számértékek a korábban létrehozott tartománykijelölésből.

>>> adatok = >>> nyomtatás(adat)

Az if utasítás lép életbe, majd egy kis utasítás következik, amely szerint a sorozat minden elemének meg kell felelnie valamilyen feltételnek. Ebben az esetben egy egész osztás maradékának kiszámítása eredményeként 0-t kell visszaadni. Amint láthatja, a vizsgán átesett számok szerepeltek a listán.

Generátor ciklussal

A Python lehetővé teszi egy lista létrehozását is több ciklus használatával., szögletes zárójelbe helyezve őket. A következő példa kettőt használ azokhoz a konstrukciókhoz, amelyek felváltva iterálják az i és j változók értékeit. Számukra vonatkozó numerikus tartomány (0-tól 3-ig), mint korábban, a tartomány módszerekkel állítható be.

>>> adatok = >>> nyomtatás(adat)

A kód végrehajtásának eredménye egy adatlista létrehozása az i és j változók váltakozó szorzásával. A for loopoknak köszönhetően értékeik lépésről lépésre növekszenek. Ez létrehoz egy kilenc elemből álló listát.

Beágyazott listák generálása

Néha egy programozónak egynél több dimenziójú listákat kell használnia. Például többdimenziós adatkészletekre lehet szükség, ha matematikai mátrixokkal dolgozunk. Használhat generátorokat is ehhez a Pythonban, egyszerűen úgy, hogy hurkot helyez el, hogy egy listát hozzon létre a másikban. A beágyazott listák hatókörének megszorításai szögletes zárójelek lesznek, amint az a következő példában látható.

>>> adatok = [ j-re in range(0, 3)] >>> print(data) [, , ]

Ez a kód bemutatja, hogyan lehet kétdimenziós 3x3-as mátrixot létrehozni a Python kétdimenziós listagenerátorával. Ennek a numerikus sorozatnak az elemei a tartománymódszerek digitális értékei voltak, mint az előző példákban. Az i és j változókat ciklusonként eggyel növeljük, és egymás között megszorozzuk. A nyomtatási funkció a generált adatkészlet vizuális megjelenítésére szolgál a számítógép képernyőjén.

Egy Python beágyazott lista létrehozásakor gyakran nullákból álló mátrix generátort használnak. Példaként hozzunk létre egy 3x2-es mátrixot:

>>> adat = [ y-hez a(3) tartományban] >>> print(data) [, , ]

Lista generátor lambdával

Mint tudják, a lambda függvények a Pythonban olyan műveletek, amelyek értéket adnak vissza. Ennek a mechanizmusnak az az előnye, hogy egy kifejezésen belül használható. Ezzel jelentősen csökkenthető a programozónak begépelendő kód mennyisége, mivel ebben az esetben nincs szükség új metódus külön deklarálására. Listagenerátor a lambdával Pythonban lehetővé teszi

A Python lambda függvényeket néha listagenerátorokban használják. A következő példa egy új számsorozatot hoz létre a tartomány metódus eredményeként. Mint korábban, ennek a halmaznak egy eleme i változóként van ábrázolva, amely fokozatosan új értékeket kap (0-tól 9-ig) hurokhoz. A lambda függvény egy értéket vesz fel argumentumként, majd megszorozza önmagával, és visszaadja a generátornak.

>>> data = [(lambda i: i*i)(i) for i in range(0, 10)] >>> print(data)

Ez létrehoz egy listát, adatot, amely tartalmazza a 0-tól 9-ig tartó számok négyzetre emelésének eredményét. Szokás szerint a nyomtatás funkció kinyomtatja az információkat a képernyőre.

itertools használata

Speciális listageneráláshoz a Pythonban az itertools nevű beépülő modul könyvtárat használjuk. Segítségével értékkészleteket hozhat létre bizonyos szabályok szerint. A modul funkcióinak aktiválásához a következő utasítást kell hozzáadnia a programfájl elejéhez.

Importáljon iterteszközöket

A könyvtárban található módszerek lehetővé teszik listák létrehozását továbbfejlesztett hurkok használatával. Például, segítségével könnyedén hozhat létre különböző – szimbolikus és numerikus – értékek kombinációit. A következő kód egyszerű példa lista létrehozása az ismétlési funkció hívásával.

>>> adatok = >>> nyomtatás(adat)

Amint az eredményből látható, a metódus azonos objektumok sorozatát (jelen esetben az 1-es számot) adja vissza, ötször ismételve.

Következtetés

Fejlett funkcionalitás, amelyet a Pythonban listagenerátorok képviselnek, lehetővé teszik a programozó számára az adatfeldolgozás sebességének és hatékonyságának növelését. A vizsgált mechanizmus magában foglalja mind a közönséges, mind a többdimenziós listák létrehozását bizonyos feltételek alapján, valamint hurkok felhasználását. A nyelv lambda-kifejezések és az intertools könyvtár használatával is képes generálni.

A Python támogatja a "lista megértésének" ( listagenerátorok).

Ez a koncepció lehetővé teszi, hogy listákat készítsen nagyon természetes és egyszerű módon, akárcsak a matematikusok.

Az alábbiakban felsoroljuk a listák (vagy gyűjtemények, sorok vagy vektorok) matematikai leírásának általános módjait:

S = (x 2: x in (0 ... 9))
V = (1,2,4,8, ..., 2 2)
M = (x | x S-ben és x páros)

Talán emlékszel ehhez hasonló dolgokra az iskolából. A Pythonban ugyanazokat a kifejezéseket írhatja le, mint egy matematikus, anélkül, hogy különleges szintaxist kellene emlékeznie.

Így néznek ki kifejezéseink Pythonban:

>>> S = >>> V = >>> M = >>> >>> nyomtat S; nyomtat V; nyomtat M
Biztos vagyok benne, hogy egy összetettebb példát szeretne látni. :) Az alábbiakban egy másik módszert mutatunk be a prímszámok megtalálására. Az érdekes az, hogy először összeállítunk egy listát nem prímszámokból, az első listagenerátor segítségével, majd a második listagenerátorral, hogy megkapjuk a lista "inverzét", vagyis a prímszámokat.

>>> noprimes = >>> primes = >>> prímszámok nyomtatása Megjegyzés: A listagenerátorokat egymásba ágyazhatja, így példánkban egyetlen kifejezéssel is boldogulhat (anélkül, hogy a "noprimes" változót kellene tárolni közbenső eredmények) . A kifejezésünk azonban hosszú és kevésbé olvasható lenne, ami nem ajánlott. Természetesen a listagenerátor nem csak számokra használható. A listák bármilyen típusú elemet tartalmazhatnak, beleértve a karakterláncokat, soron belüli listákat és függvényeket. Akár keverheted is Különféle típusok egy listában.

A következő példában a karakterláncok listájával foglalkozunk, és listák listáját állítjuk elő. A beépített listák mindegyike két karakterláncot és egy egész értéket tartalmaz.

>>> words = "A gyors barna róka átugrik a lusta kutyán".split() >>> szavak nyomtatása ["A", "gyors", "barna", "róka", "ugrik", "át", "a", "lusta", "kutya"] >>> cucc = [ w-re szavakban] >>> i-re a cuccban: ... nyomtat i
["A", "a", 3] ["GYORS", "gyors", 5] ["BARNA", "barna", 5] ["RÓKA", "róka", 3] ["UGRÁS", " ugrik", 5] ["OVER", "over", 4] ["A", "a", 3] ["LUSTA", "lusta", 4] ["KUTYA", "kutya", 3] > >> cucc = map(lambda w: , szavak) >>> az i-re in stuff: ... print i ["A", "the", 3] ["GYORS", "gyors", 5] ["BARNA" " ", "barna", 5] ["RÓKA", "róka", 3] ["UGRÁS", "ugrik", 5] ["OVER", "over", 4] ["A", "a" , 3] ["LUSTA", "lusta", 4] ["KUTYA", "kutya", 3]
A fenti példa azt szemlélteti, hogy a feladatunkat kétféleképpen valósíthatjuk meg – először egy listagenerátor, majd a map() és a lambda függvény használatával. Vannak azonban olyan esetek, amikor a map() nem használható, hanem listagenerátort kell használnia, és fordítva. Ha mindkét módszer alkalmazható, gyakran jobb a listagenerátor használata, mert az a legtöbb esetben hatékonyabb és olvashatóbb.

Nem használhat listagenerátorokat, ha az összeállítási feltétel túl bonyolult ahhoz, hogy "for" és "if" utasításokkal kifejezhető legyen, vagy ha a feltétel dinamikusan változik a program futása közben. Ebben az esetben jobb a map() és/vagy a filter() használata megfelelő függvénnyel. Természetesen ezeket kombinálhatja listagenerátorral.

Eredeti cikk: