A list egy módosítható gyűjtemény, amely elemeket tárol sorrendben.
A legtöbb gyűjteményhez hasonlóan (lásd a beépített tuple, dict és set típusokat), a listák bármilyen (vagy akár többféle) adattípusra tárolhatnak hivatkozást, beleértve a többi listát is.
A listák egészben vagy részben átmásolhatók szeletelési jelöléssel vagy a <list>.copy() használatával.
Ahogy bármelyik sorozat esetében, a lists elemeire balról 0-based index számmal, jobbról pedig -1-based index számmal hivatkozhatsz.
A listák mind az általános, mind a módosítható sorozatműveleteket támogatják, például a min(<list>)/max(<list>), a <list>.index(), a <list>.append() és a <list>.reverse() műveletet.
A list elemein a for item in <list> szerkezettel iterálhatsz végig.
A for index, item in enumerate(<list>) akkor használható, ha egyszerre van szükséged az elem indexére és az értékére is.
A Python emellett számos hasznos lista-metódust is kínál a listákkal való munkához.
Ezek közül a list methods néhányát az alábbiakban mutatjuk be.
Vedd figyelembe, hogy amikor egy list-method segítségével módosítasz egy list objektumot, magát az átadott listát változtatod meg.
Ha nem szeretnéd módosítani az eredeti list objektumot, legalább egy shallow copy-t kell készítened róla szeleteléssel vagy a <list>.copy() hívásával.
Ha egy meglévő lista végére, azaz a „jobb oldalára” szeretnél elemet hozzáadni, használd a <list>.append(<item>) metódust:
>>> numbers = [1, 2, 3]
>>> numbers.append(9)
>>> numbers
[1, 2, 3, 9]
A <list>.insert() nem a végére fűzi az elemet, hanem lehetővé teszi, hogy a lista egy adott indexére szúrd be.
Két paramétert vár:
<index>, ahová az elemet be szeretnéd szúrni.<item>.Megjegyzés: Ha a megadott index 0, az elem a list elejére (a „bal oldalára”) kerül.
Ha a megadott index nagyobb, mint a list utolsó indexe, az elem az utolsó helyre kerül, ami megegyezik a <list>.append(<item>) használatával.
>>> numbers = [1, 2, 3]
>>> numbers.insert(0, -2)
>>> numbers
[-2, 1, 2, 3]
>>> numbers.insert(1, 0)
>>> numbers
[-2, 0, 1, 2, 3]
A <list>.extend(<item>) egy meglévő lista összefűzésére használható egy másik iterálható objektum elemeivel (például set, tuple, str vagy list).
Az iterálható objektum kicsomagolásra kerül, és az elemei sorban hozzáfűződnek (ha ilyenkor a <list>.append(<item>) metódust használnád, a teljes iterálható objektum egyetlen elemként kerülne be.).
>>> numbers = [1, 2, 3]
>>> other_numbers = [5, 6, 7]
>>> numbers.extend(other_numbers)
>>> numbers
[1, 2, 3, 5, 6, 7]
>>> numbers.extend([8, 9])
>>> numbers
[1, 2, 3, 5, 6, 7, 8, 9]
>>> numbers.append([8,9])
>>> numbers
[1, 2, 3, 5, 6, 7, 8, 9, [8, 9]]
Egy elem törléséhez a listából használd a <list>.remove(<item>) metódust, és add át argumentumként az eltávolítandó elemet.
A <list>.remove(<item>) ValueError kivételt dob, ha az elem nem szerepel a list-ben.
>>> numbers = [1, 2, 3]
>>> numbers.remove(2)
>>> numbers
[1, 3]
# Trying to remove a value that is not in the list throws a ValueError
>>> numbers.remove(0)
ValueError: list.remove(x): x not in list
A <list>.pop(<index>) metódus ezzel szemben az elemet eltávolítja, és a return segítségével vissza is adja, hogy felhasználhasd.
A <list>.pop(<index>) egy opcionális paramétert vár: az eltávolítandó és visszaadandó elem indexét.
Ha az (opcionális) index argumentumot nem adod meg, a list utolsó eleme kerül eltávolításra és visszaadásra.
Ha a megadott index nagyobb, mint az utolsó elem indexe, IndexError kivétel keletkezik.
>>> numbers = [1, 2, 3]
>>> numbers.pop(0)
1
>>> numbers
[2, 3]
>>> numbers.pop()
3
>>> numbers
[2]
>>> numbers.pop(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop index out of range
A list összes eleme eltávolítható a list.clear() metódussal. Ez nem vár paramétert.
>>> numbers = [1, 2, 3]
>>> numbers.clear()
>>> numbers
[]
A <list>.reverse() metódus helyben megfordítja az elemek sorrendjét.
>>> numbers = [1, 2, 3]
>>> numbers.reverse()
>>> numbers
[3, 2, 1]
Egy lista helyben átrendezhető a <list>.sort() segítségével.
Az alapértelmezett rendezési sorrend balról nézve növekvő.
A Python dokumentációja további tippeket és technikákat kínál a rendezéshez.
>>> names = ["Tony", "Natasha", "Thor", "Bruce"]
# The default sort order is *ascending*.
>>> names.sort()
>>> names
["Bruce", "Natasha", "Thor", "Tony"]
Ha csökkenő sorrendet szeretnél, add át a reverse=True argumentumot:
>>> names = ["Tony", "Natasha", "Thor", "Bruce"]
>>> names.sort(reverse=True)
>>> names
["Tony", "Thor", "Natasha", "Bruce"]
Ha nem szeretnéd módosítani az eredeti listát, a beépített sorted(<iterable>) függvénnyel egy rendezett másolatot kaphatsz.
>>> names = ["Tony", "Natasha", "Thor", "Bruce"]
>>> sorted(names)
['Bruce', 'Natasha', 'Thor', 'Tony']
Egy elem listában való előfordulásainak számát a list.count(<item>) segítségével számolhatod ki.
Argumentumként a megszámolandó item-et várja, és visszaadja, hogy az adott elem összesen hányszor szerepel a list-ben.
>>> items = [1, 4, 7, 8, 2, 9, 2, 1, 1, 0, 4, 3]
>>> items.count(1)
3
A <list>.index(<item>) visszaadja az átadott elem első előfordulásának index számát.
Ha nincs előfordulás, ValueError kivétel keletkezik.
Ha nincs szükséged az elem pontos pozíciójára, a beépített in operátor hatékonyabb annak ellenőrzésére, hogy egy lista tartalmaz-e egy adott értéket.
Az indexelés balról nullától indul, tehát az „első” elem pozíciója 0.
Jobbról is indexelhetsz, ott a -1-től indul.
>>> items = [7, 4, 1, 0, 2, 5]
>>> items.index(4)
1
>>> items.index(10)
ValueError: 10 is not in list
A start és end indexek megadásával a keresést a list egy adott szakaszára szűkítheted:
>>> names = ["Tina", "Leo", "Thomas", "Tina", "Emily", "Justin"]
>>> names.index("Tina")
0
>>> names.index("Tina", 2, 5)
3
Chaitana egy nagyon népszerű vidámpark tulajdonosa. A gyönyörűen parkosított terület kellős közepén csak egyetlen játéka van: The Biggest Roller Coaster in the World(TM). Bár csak ez az egy attrakció van, az emberek a világ minden tájáról utaznak ide, és órákig sorban állnak azért, hogy kipróbálhassák Chaitana hiper-hullámvasútját.
Ehhez a játékhoz két sor van, mindegyiket egy-egy list képviseli:
Arra kértek, hogy írj egy kis kódot, amivel jobban kezelhetők a park vendégei. A lehető leghamarabb meg kell valósítanod a következő függvényeket, mielőtt a vendégek (és a főnököd, Chaitana!) morcosak lesznek. Figyelmesen olvasd el őket. Néhány részfeladat arra kér, hogy változtasd meg vagy frissítsd a meglévő sort, mások viszont arra, hogy készíts róla egy másolatot.
Definiáld az add_me_to_the_queue() függvényt, amely 4 paramétert vár (<express_queue>, <normal_queue>, <ticket_type>, <person_name>), és visszaadja a megfelelő sort az illető nevével frissítve.
<ticket_type> egy int, ahol az 1 == express_queue, a 0 == normal_queue.<person_name> annak a személynek a neve (egy str), akit a megfelelő sorba be kell tenni.>>> add_me_to_the_queue(express_queue=["Tony", "Bruce"], normal_queue=["RobotGuy", "WW"], ticket_type=1, person_name="RichieRich")
...
["Tony", "Bruce", "RichieRich"]
>>> add_me_to_the_queue(express_queue=["Tony", "Bruce"], normal_queue=["RobotGuy", "WW"], ticket_type=0, person_name="HawkEye")
....
["RobotGuy", "WW", "HawkEye"]
Egy ember későn érkezett a parkba, de ahhoz a sorhoz szeretne csatlakozni, ahol a barátai várakoznak. Fogalma sincs azonban, hogy hol állnak a barátai, és nincs térerő, hogy felhívja őket.
Definiáld a find_my_friend() függvényt, amely 2 paramétert vár, queue és friend_name, és visszaadja a személy nevének helyét a sorban.
<queue> a sorban álló emberek list-je.<friend_name> annak a barátnak a neve, akinek az indexét (a sorban elfoglalt helyét) meg kell keresned.Ne feledd: az indexelés balról 0-tól, jobbról -1-től indul.
>>> find_my_friend(queue=["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], friend_name="Steve")
...
1
Most, hogy megtaláltuk a barátait (a fenti 2. részfeladatban), a későn érkező szeretne csatlakozni hozzájuk a sorban elfoglalt helyükön.
Definiáld az add_me_with_my_friends() függvényt, amely 3 paramétert vár: queue, index és person_name.
<queue> a sorban álló emberek list-je.<index> az a pozíció, ahová az új személyt be kell szúrni.<person_name> annak a személynek a neve, akit az adott index pozícióba kell beszúrni.Add vissza a sort frissítve a későn érkező nevével.
>>> add_me_with_my_friends(queue=["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], index=1, person_name="Bucky")
...
["Natasha", "Bucky", "Steve", "T'challa", "Wanda", "Rocket"]
Most hallottad a sorból, hogy van ott egy igazán gonosz ember, aki lökdösődik, kiabál és bajt kever. Ki kell dobnod ezt a gazembert a rossz viselkedése miatt!
Definiáld a remove_the_mean_person() függvényt, amely 2 paramétert vár: queue és person_name.
<queue> a sorban álló emberek list-je.<person_name> annak a személynek a neve, akit ki kell rúgni.Add vissza a sort úgy frissítve, hogy ne szerepeljen benne a gonosz ember neve.
>>> remove_the_mean_person(queue=["Natasha", "Steve", "Eltran", "Wanda", "Rocket"], person_name="Eltran")
...
["Natasha", "Steve", "Wanda", "Rocket"]
Lehet, hogy még nem láttál két egymáshoz nem tartozó embert, akik pontosan ugyanúgy néznek ki, de azt biztosan láttad már, hogy egymáshoz nem tartozó embereknek pontosan ugyanaz a nevük (névrokonok)! Úgy tűnik, ma sok ilyen ember van jelen. Szeretnéd tudni, hogy egy adott név hányszor fordul elő a sorban.
Definiáld a how_many_namefellows() függvényt, amely 2 paramétert vár, queue és person_name.
<queue> a sorban álló emberek list-je.<person_name> az a név, amiről azt gyanítod, hogy többször is előfordulhat a sorban.Add vissza a person_name előfordulásainak számát egy int-ként.
>>> how_many_namefellows(queue=["Natasha", "Steve", "Eltran", "Natasha", "Rocket"], person_name="Natasha")
...
2
Sajnos ma túlzsúfolt a park, és el kell távolítanod az utolsó embert a normál sorból (kapsz egy utalványt, hogy egy másik napon a fast-track sorban térhessen vissza).
Definiálnod kell a remove_the_last_person() függvényt, amely 1 paramétert vár, a queue-t, ami a sorban álló emberek listája.
Frissítened kell a list-et, és return-nel vissza is kell adnod az eltávolított személy nevét, hogy utalványt írhass neki.
>>> remove_the_last_person(queue=["Natasha", "Steve", "Eltran", "Natasha", "Rocket"])
...
'Rocket'
Adminisztratív okokból egy adott sor összes nevét ábécé szerinti sorrendbe kell rendezned.
Definiáld a sorted_names() függvényt, amely 1 argumentumot vár, a queue-t (a sorban álló emberek list-jét), és visszaadja a list egy sorted másolatát.
>>> sorted_names(queue=["Natasha", "Steve", "Eltran", "Natasha", "Rocket"])
...
['Eltran', 'Natasha', 'Natasha', 'Rocket', 'Steve']
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Python nyelvet 17 fogalom146 feladat segítségével, valódi emberi mentorálással, mindez ingyen.