LISTÁK ÉS UTASÍTÁSOK

A listák az egyike a Python értékes funkcióinak. A lista olyan objektumok gyűjteménye, amelyek valamilyen közös jellemzőkkel rendelkeznek. A Python listatámogatása akkor is értékes lehet számunkra, ha csak néhány elemet tartalmaz. Szinte mindent meg lehet adni a listák kezelésével: lehet a barátaink és osztálytársaink nevétől a kedvenc műsoraink és színészeink nevén át a kedvenc városainkig. Nincs szükség egységességre a listán szereplő dolgok között. Szabadon beilleszthetünk bármit az indexbe.

Mi is a lista valójában?

A lista egy olyan változó, amelynek értékei vesszővel elválasztott és szögletes zárójelekbe tett elemek sorozata.

Állítsunk össze egy listát a velünk egy osztályba járó legközelebbi barátainkról:

				
					classmates_names = ["Liza", "Áron", "Piroska", "Lajos"]
print(classmates_names)
				
			

Ha végrehajtjuk a fenti kódot, a Python szögletes zárójelben adja vissza a listát a konzolunkban:

				
					['Liza', 'Áron', 'Piroska', 'Lajos']
				
			

Listaelemek lekérdezése

A lista nagyon fontos számunkra, hiszen a szögletes zárójelben feltüntetett értékeket a számítógép memóriájában tároljuk le először, majd utána íratjuk ki a tárolót (változót).

Mi azt szeretnénk, ha az értékek – amíg azt szeretnénk – mindig tárolva legyenek, hogy bármikor visszatérhessen hozzájuk.

Viszont előfordulnak esetek, amikor egy későbbi folyamat során, pl. kiíratáskor szökségünk lesz arra, hogy szűrjük a listákat megadott kritériumok szerint. Ezért a konzolban megjelenő utasításunk végeredménye eltérhet a listában feltüntetett értékektől.

Ilyen esetben létezik egy un. “mechanizmus” a lista egyes elemeinek megcímzésére.

Tegyük fel, hogy fontos, hogy az osztálytársaink közül csak az egyik nevet mutassuk meg a listából.

Ebben az esetben adjunk meg a Pythonnak egy kódot, amely azonosítja az elem helyét vagy indexét, és a Python a többi teendőt elvégzi nekünk.

Nézzünk csak rá az alábbi utasításra:

				
					classmates_names = ["Liza", "Áron", "Piroska", "Lajos"]
print(classmates_names[0])

				
			

A Pythonban rendkívül könnyedén adhatjuk meg, hogy mit is szeretnénk látni egy listából. Jelen esetben kiírattuk a listában szereplő legelső nevet:

				
					Liza
				
			

Fontos megjegyezni, hogy a konzolban kiíratott név helye szögletes zárójelben van megadva a kiíratásra kerülő lista változó után [0].

A Python pozíciószámláló módszere nulláról indul. A következő kód a lista elemeit a megfelelő indexükben jeleníti meg.

				
					classmates_names = ["Liza", "Áron", "Piroska", "Lajos"]

print(classmates_names[1])
print(classmates_names[2])
print(classmates_names[2])

				
			

Eredményként a következőket kapjuk:

				
					Áron
Piroska
Piroska
				
			

Ha hosszú listát íratunk ki, előfordulhat, hogy nem tudjuk, hány elem van benne. Ekkor meg tudjuk azt csinálni, hogy a lista végétől (tehát visszafelé) számítva íratunk ki elemeket a konzolba.

A példa kedvéért tegyük fel, hogy a lista utolsó nevére van szükségünk. Írassuk is ki a konzolunkba az alábbi módon:

				
					classmates_names = ["Liza", "Áron", "Piroska", "Lajos"]
print(classmates_names[-1])

				
			

A fenti kódot futtatva látni fogjuk, hogy a Python a listánkban szereplő “Lajos” nevet adja eredményül:

				
					Lajos
				
			

Amint látjuk, a lista utolsó elemét is meg tudjuk ily módon jeleníteni a konzolunkban. Sőt! Ha szeretnénk, a korábbiakban ismertetett módon haladhatunk a lista végéről is:

				
					classmates_names = ["Liza", "Áron", "Piroska", "Lajos"]

print(classmates_names[-1])
print(classmates_names[-2])
print(classmates_names[-3])
print(classmates_names[-4])

				
			

A Python végrehajtja a kiíratásra vonatkozó parancsainkat, és fordított sorrendben jeleníti meg a listában szereplő neveket.

				
					Lajos
Piroska
Áron
Liza
				
			

Listaelemekkel végzett műveletek

Egy lista úgy jöhet létre, ha létrehozzuk azt. Viszont bármikor hivatkozhatunk a listában szereplő elemre név szerint.

A lista bővülésével azonban egyre nehezebb a teljes listát átlátni. Ebből a célból a Python listakezelés felbecsülhetetlen értékűvé válik.

Tegyük fel, hogy a megtiszteltetés neked jutott, hogy a diákoknak elismeréseket írj az iskolai záróvizsgák után, ezzel gratulálva az elért eredményeikhez.

Az általános (manuális) munkamenet az lenne, ha megterveznénk egy Oklevél sablont, majd egyesével a tanulók névsorát böngésznénk, beazonosítanánk az minden diákot név -és születési dátum alapján. Ha meg is találnánk egy tanulót a listában, kezdhetnénk elölről a következő diákkal addig, amíg a listánk végére nem érünk.

Még belegondolni is szörnyű. Egyetértesz?

Most vegyük úgy, hogy a Pythonban ez a névlista már elkészült. A tanulók jegyei a vizsgán nyújtott teljesítményük alapján a kitűnőtől (legjobbak) az elégtelenig (legrosszabbak) vannak rendezve.

A gratuláció kiíratásához most már csak egy programot kell kreálnunk, amely megmondja a Pythonnak, hogy vegye ki a diák nevét a listáról, és küldjön üzenetet.

Egyszerűen csak adjuk ki az utasítást, és a Python “megmondja” a tanuló nevét.

Példa 1:

“Te vagy az osztály legjobb tanulója”

				
					classmates_names = ["Piroska", "Áron", "Liza", "Bertalan", "Géza", "Károly", "Anett", "Ádám"]

print("Gratulálunk" + ", " + classmates_names[0] + ". " + "Elért eredményeid alapján te lettél az osztály legjobb tanulója!")

				
			

Ha lefuttatjuk ezt a Python-kódot, a következő üzenetet kapjuk:

				
					Gratulálunk, Piroska. Elért eredményeid alapján te lettél az osztály legjobb tanulója!
				
			

Mostantól minden diák részére kinyomtathatunk egy ehhez hasonló névre szóló gratulációt.

Példa 2:

Keményen dolgoztál, de meghozta a gyümölcsét”

Írassuk ki az osztály legjobb tanulója utáni további diákokat, akik szintén jól teljesítettek:

				
					classmates_names = ["Piroska", "Áron", "Liza", "Bertalan", "Géza", "Károly", "Anett", "Ádám"]

print("Gratulálunk" + ", " + classmates_names[1] + ". " + "Te vagy az osztály második legjobb tanulója!")

print("Gratulálunk" + ", " + classmates_names[2] + ". " + "Te vagy az osztály harmadik legjobb tanulója!")

print("Gratulálunk" + ", " + classmates_names[3] + ". " + "Te vagy az osztály negyedik legjobb tanulója!")

print("Gratulálunk" + ", " + classmates_names[4] + ". " + "Te vagy az osztály ötödik legjobb tanulója!")
				
			

Végeredmény a konzolban:

				
					Gratulálunk, Áron. Te vagy az osztály második legjobb tanulója!
Gratulálunk, Liza. Te vagy az osztály harmadik legjobb tanulója!
Gratulálunk, Bertalan. Te vagy az osztály negyedik legjobb tanulója!
Gratulálunk, Géza. Te vagy az osztály ötödik legjobb tanulója!
				
			

A fenti példában azt csináltuk, hogy egy szögletes zárójelben kiírattuk a neveket az index azonosítójuk alapján. Mivel a legjobb tanulók a lista elejére lettek rendezve korábban, a [0] index jelentette a legjobb tanuló nevét, a [1] a második legjobb tanuló nevét, a [2] a harmadik legjobb tanuló nevét, stb.

Tegyük fel, hogy tévedés történt, és Piroska a negyedik legjobb tanuló az osztályban és Bertalan az első.

Ezt a következő kód használatával változtathatjuk meg. Bertalannak kellene a classmates_names[0] index-nek lennie, míg Piroskának  az indexe classmates_names[3] -ra kellene, hogy változzon. Ergo helyet kellene cserélniük.

Az alábbi ábra mutatja nekünk:

A Python-nak azt az utasítást kellene kapni, hogy a Bertalan legyen az első helyen, Piroska pedig a negyedik helyen.

Mivel a tanulók listájához (eredmény alapján történő sorba rendezéséhez) most nem nyúlunk, a kiíratáskor könnyen meg tudjuk jeleníteni az index számok felcserélésével:

				
					classmates_names = ["Piroska", "Áron", "Liza", "Bertalan", "Géza", "Károly", "Anett", "Ádám"]

print("Gratulálunk" + ", " + classmates_names[3] + ". " + "Elért eredményeid alapján te lettél az osztály legjobb tanulója!")

print("Gratulálunk" + ", " + classmates_names[1] + ". " + "Te vagy az osztály második legjobb tanulója!")

print("Gratulálunk" + ", " + classmates_names[2] + ". " + "Te vagy az osztály harmadik legjobb tanulója!")

print("Gratulálunk" + ", " + classmates_names[0] + ". " + "Te vagy az osztály negyedik legjobb tanulója!")

print("Gratulálunk" + ", " + classmates_names[4] + ". " + "Te vagy az osztály ötödik legjobb tanulója!")

				
			

Konzol:

				
					Gratulálunk, Bertalan. Elért eredményeid alapján te lettél az osztály legjobb tanulója!
Gratulálunk, Áron. Te vagy az osztály második legjobb tanulója!
Gratulálunk, Liza. Te vagy az osztály harmadik legjobb tanulója!
Gratulálunk, Piroska. Te vagy az osztály negyedik legjobb tanulója!
Gratulálunk, Géza. Te vagy az osztály ötödik legjobb tanulója!
				
			

Elem hozzáadása egy lista végéhez

Az append() függvény

Tegyük fel, hogy a fenti lista hiányos és kimaradt belőle néhány diák. Ebben az esetben lista bővítésre van szükségünk.

Az append() utasítást fogjuk erre a célra használni, ezzel új elem-et (nevet) adhatunk a [] kigyűjtött nevekhez, amely a lista végére kerül majd.

Adjunk is hozzá további két tanulót a névsorhoz:

				
					classmates_names = ["Piroska", "Áron", "Liza", "Bertalan", "Géza", "Károly", "Anett", "Ádám"]

classmates_names.append("Szilvia")
classmates_names.append("Tamás")

print(classmates_names)

				
			

Konzol:

				
					['Piroska', 'Áron', 'Liza', 'Bertalan', 'Géza', 'Károly', 'Anett', 'Ádám', 'Szilvia', 'Tamás']
				
			

A listához való új elem hozzáadása során az új tanulók nevei zárójelben vannak. Ezenkívül minden új elem-et külön kell hozzáadnunk.

Ennek az az oka, hogy egyszerre csak egy komponenssel tudunk bővíteni. A Python figyelmeztetéssel jelez, ha egynél több elemet szeretnénk a listánkhoz hozzáadni.

Elem hozzáadása a listánk tetszőleges pozíciójához

Az insert() függvény

Lehetőségeink nem merülnek ki azzal, hogy elemeket a listánk végéhez csatolunk. Szabadon beilleszthetjük őket bárhová, ahová csak szeretnénk.

Ehhez használjuk az insert() függvényt.

A példa kedvéért adjuk hozzá Eleonórát a listánk 5. pozíciójához:

				
					classmates_names = ["Piroska", "Áron", "Liza", "Bertalan", "Géza", "Károly", "Anett", "Ádám"]

classmates_names.insert(5, "Eleonóra")
print(classmates_names)

				
			

A Python által generált eredmény:

				
					['Piroska', 'Áron', 'Liza', 'Bertalan', 'Géza', 'Eleonóra', 'Károly', 'Anett', 'Ádám']
				
			

Elemek eltávolítása a listából

A remove() utasítás

Ezt szemléltetve töröljük is ki Lizát (a lista 3-ik elemét) a névsorból. Erre több mód is létezik. Először nézzük meg a remove() paranccsal, amelyben az elem nevét adjuk meg “szövegként” vagy másnéven string- ként:

				
					classmates_names = ["Piroska", "Áron", "Liza", "Bertalan", "Géza", "Károly", "Anett", "Ádám"]

classmates_names.remove("Liza")

print(classmates_names)

				
			

Az eredmény pedig:

				
					['Piroska', 'Áron', 'Bertalan', 'Géza', 'Károly', 'Anett', 'Ádám']
				
			

del utasítás egy , -vagy több elem törlésére

				
					classmates_names = ["Piroska", "Áron", "Liza", "Bertalan", "Géza", "Károly", "Anett", "Ádám"]

del classmates_names[2]
del classmates_names[4:6]

print(classmates_names)
				
			

A ” del classmates_names[2]” parancsnál láthatjuk, hogy “Liza” kiesett a listából.

A “del classmates_names[4 : 6]” törlésnél több erelet érintünk: fontos megjegyezni, hogy ennél az intervallumnál a Python az első a [ ] szögletes zárójelben megadott első index számot [4] érintő “Gézát” nem fogja törölni. Tehát az eltávolítás az [5]-től fog kezdődni “Károly“, és a pozíció [6]-nál fejeződik be (“Anett“). Amint láthatjuk, “Ádám” maradt a lista végén, eredetileg [7]-es pozíció számmal.

Tehát, általánosságban elmondható, hogy a [ ] zárójelekben megemlített két számnál az elsőt nem veszi figyelembe, csak az utolsó elemet.

Output:

				
					['Piroska', 'Áron', 'Bertalan', 'Géza', 'Ádám']
				
			

Törlés a pop() utasítással

				
					classmates_names = ["Piroska", "Áron", "Liza", "Bertalan", "Géza", "Károly", "Anett", "Ádám"]

popped_names = classmates_names.pop(1)

print(classmates_names)
print(popped_names)

				
			

Output:

A fenti példában a classmates_names.pop() változóból származó törölt nevet egy vadonatúj változóban, a “popped_names” -ben tároljuk.

				
					['Piroska', 'Liza', 'Bertalan', 'Géza', 'Károly', 'Anett', 'Ádám']
Áron

				
			

“Áron” kiesett a listából, de a törölt elemek változóban való tárolása hasznos tud lenni, ha a fenti módom meg szeretnénk jeleníteni. Ádám már nincs benne a [ ] listánkban, csak alatt kiírattuk a nevét, hogy átláthassuk a folyamatot.

Röviden összegezve:

A remove(), vagy a pop() utasítások egy elem törlésére használható funkciók, míg a del metódussal egyszerre több elemet is tudunk törölni. 

 

Ezekkel a parancsokkal dolgozva a megadott elem véglegesen törlődik a listából. A törlésre került objektumok már nem lesznek elérhetőek. 

Lista elemeinek felcserélése vagy variálása

Az alábbi példán szemléltetve bármikor lehetőségünk van nem csak a kiíratáskor, de már a listában is igazítani elemeket, vagy felcserélni tetszőleges sorrendben.

				
					classmates_names = ["Piroska", "Áron", "Liza", "Bertalan", "Géza", "Károly", "Anett", "Ádám"]
print(classmates_names)

delete_item = "Piroska"
classmates_names.remove("Piroska")
classmates_names.insert(1, delete_item)
print(classmates_names)

				
			

Output:

A konzolunkban láthatjuk az eredeti és az új listánkat.

				
					['Piroska', 'Áron', 'Liza', 'Bertalan', 'Géza', 'Károly', 'Anett', 'Ádám']
['Áron', 'Piroska', 'Liza', 'Bertalan', 'Géza', 'Károly', 'Anett', 'Ádám']
				
			

ÁTTEKINTÉS

Ez a fejezet segített neked megmutatni, hogyan tudunk a listákkal dolgozni és különféle műveleteket végrehajtani. Most már tudod, hogyan hozhatsz létre listákat, adhatsz hozzá új elemeket, hogyan törölheted – vagy rendezheted őket. Ha ennek az anyagrésznek a végére értél, a lentebb megtalálható feladatok segíteni tudnak abban, hogy önállóan is boldogulni tudj.

Feladatok

1.feladat

Hozz létre egy listát, amelyben felsorolsz 13 tetszőleges elemet. Írasd ki a konzolban őket elölről, tehát a lista elejétől egyesével, majd a végétől visszafelé is.

2.feladat

Adj a listához hozzá néhány új elemet és töröld is őket. Próbálj csak egy, utána pedig egyszerre több elemet törölni. Próbáld ki a fentebb ismertetett összes lehetőséget a listából való elem eltávolítására.

Fontos!

A feladatok a gyakorlásra vannak. A gyakorlással pedig tapasztalatot szerzel. Mindenképp javasolt, hogy a feladatokat önállóan oldd meg. Javaslom, hogy ha végeztél, csak akkor nézz rá a megoldásra. Erősen ajánlott, hogy előtte mindenképp szánj rá időt és próbáld önállóan végiggondolni, hogy mit is kellene és hogyan lehetséges megvalósítani.

MEGOLDÁSOK (LISTÁK ÉS UTASÍTÁSOK)

1. feladat:

				
					# Létrehozve egy lista, 13 irodai felszereléssel. A listát letároljuk az "office_setup" változóban, hogy lekérdezhető legyen
office_setup = ["laptop", "egér", "nyomtató", "szkenner", "router", "szerver", "pc", "monitor", "headset", "asztal", "szék", "kamera", "állvány"]

# Általános lekérdezés, a listát fogjuk megkapni eredményül
print(office_setup)

# Lista lekérdezése egyenként, az első elemtől az utolsóig
print(office_setup[0])
print(office_setup[1])
print(office_setup[2])
print(office_setup[3])
print(office_setup[4])
print(office_setup[5])
print(office_setup[6])
print(office_setup[7])
print(office_setup[8])
print(office_setup[9])
print(office_setup[10])
print(office_setup[11])
print(office_setup[12])

# Lista lekérdezése egyenként az utolsó elemtől indulva az elsőig
print(office_setup[-1])
print(office_setup[-2])
print(office_setup[-3])
print(office_setup[-4])
print(office_setup[-5])
print(office_setup[-6])
print(office_setup[-7])
print(office_setup[-8])
print(office_setup[-9])
print(office_setup[-10])
print(office_setup[-11])
print(office_setup[-12])
print(office_setup[-13])



				
			

Output:

				
					['laptop', 'egér', 'nyomtató', 'szkenner', 'router', 'szerver', 'pc', 'monitor', 'headset', 'asztal', 'szék', 'kamera', 'állvány']
laptop
egér
nyomtató
szkenner
router
szerver
pc
monitor
headset
asztal
szék
kamera
állvány
állvány
kamera
szék
asztal
headset
monitor
pc
szerver
router
szkenner
nyomtató
egér
laptop

				
			

2. feladat:

				
					# Létrehozva egy lista, 13 irodai felszereléssel. A listát letároljuk az "office_setup" változóban, hogy lekérdezhető legyen
office_setup = ["laptop", "egér", "nyomtató", "szkenner", "router", "szerver", "pc", "monitor", "headset", "asztal", "szék", "kamera", "állvány"]

# Általános lekérdezés, a listát fogjuk megkapni eredményül
print("Általános lekérdezés:") # Ki tudunk íratni tetszőleges szöveget a konzolban
print(office_setup)

# Sorköz beszúrása, hogy a konzolban az egyes lekérdezések láthatóan elkülönüljenek és átláthatóbbak legyenek
print("\n")

# Új elemek hozzáadása a lista végére
office_setup.append("hálózati hosszabbító")
office_setup.append("jegyzetfüzet")

print("Új elemek hozzáadása .append() utasítással ('hálózati hosszabbító' + 'jegyzetfüzet') a lista végén :")
print(office_setup)
print("\n")

# Új elemek hozzáadása a lista első pozíciójához, majd a 4. pozícióhoz
office_setup.insert(0, "borítékok")
office_setup.insert(3, "íróeszközök")

print("Új elemek hozzáadása .insert() utasítás után a 'borítékok' és az 'íróeszközök' is listázódnak:")
print(office_setup)
print("\n")

# A .remove() utasítással eltávolítjuk a 'borítékok' és a 'laptop' elemeket
office_setup.remove("borítékok")
office_setup.remove("laptop")
print("a '.remove()' utasítással eltávolítjuk a 'borítékok' és a 'laptop' elemeket")
print(office_setup)
print("\n")

# A del metódussal kitörlünk néhány elemet
del office_setup[2:9]
print("A del metódussal kitörlünk néhány elemet")
print(office_setup)
print("\n")

# A 'pop()' utasítással eltávolítjuk a lista első elemét
office_setup.pop(0)
print("A 'pop()' utasítással eltávolítjuk a lista első elemét")
print(office_setup)
print("\n")

# Felcseréljük a lista első és utolsó elemét:
print("Felcseréljük a lista első és utolsó elemét")
delete_item = "íróeszközök"
office_setup.remove("íróeszközök")
office_setup.insert(6, delete_item)

delete_item_2 = "jegyzetfüzet"
office_setup.remove("jegyzetfüzet")
office_setup.insert(0, delete_item_2)
print(office_setup)
				
			

Output:

				
					Általános lekérdezés:
['laptop', 'egér', 'nyomtató', 'szkenner', 'router', 'szerver', 'pc', 'monitor', 'headset', 'asztal', 'szék', 'kamera', 'állvány']


Új elemek hozzáadása .append() utasítással ('hálózati hosszabbító' + 'jegyzetfüzet') a lista végén :
['laptop', 'egér', 'nyomtató', 'szkenner', 'router', 'szerver', 'pc', 'monitor', 'headset', 'asztal', 'szék', 'kamera', 'állvány', 'hálózati hosszabbító', 'jegyzetfüzet']


Új elemek hozzáadása .insert() utasítás után a 'borítékok' és az 'íróeszközök' is listázódnak:
['borítékok', 'laptop', 'egér', 'íróeszközök', 'nyomtató', 'szkenner', 'router', 'szerver', 'pc', 'monitor', 'headset', 'asztal', 'szék', 'kamera', 'állvány', 'hálózati hosszabbító', 'jegyzetfüzet']


a '.remove()' utasítással eltávolítjuk a 'borítékok' és a 'laptop' elemeket
['egér', 'íróeszközök', 'nyomtató', 'szkenner', 'router', 'szerver', 'pc', 'monitor', 'headset', 'asztal', 'szék', 'kamera', 'állvány', 'hálózati hosszabbító', 'jegyzetfüzet']


A del metódussal kitörlünk néhány elemet
['egér', 'íróeszközök', 'asztal', 'szék', 'kamera', 'állvány', 'hálózati hosszabbító', 'jegyzetfüzet']


A 'pop()' utasítással eltávolítjuk a lista első elemét
['íróeszközök', 'asztal', 'szék', 'kamera', 'állvány', 'hálózati hosszabbító', 'jegyzetfüzet']


Felcseréljük a lista első és utolsó elemét
['jegyzetfüzet', 'asztal', 'szék', 'kamera', 'állvány', 'hálózati hosszabbító', 'íróeszközök']