6. Listák
Eddig minden változónk (dobozunk) csak egyetlen értéket tudott tárolni. Ha volt egy játékunk 5 játékossal, akkor 5 külön változót kellett létrehoznunk (jatekos1, jatekos2, stb.). De mi van, ha egy osztály 30 tanulójának nevét, vagy egy játék 100 pontszámát kell eltárolnunk? Száz változót létrehozni rémálom lenne.
Erre a problémára nyújtanak tökéletes megoldást a listák. A lista olyan, mint egy sokrekeszes gyógyszeres doboz vagy egy vonat: egyetlen neve van (a vonat neve), de rengeteg vagonja lehet, és minden vagonban utazhat egy adat.
6.1. Lista létrehozása és elemek elérése (Indexelés)
A Pythonban egy listát szögletes zárójelekkel [ ] hozunk létre, az elemeket pedig vesszővel választjuk el egymástól. Egy listában tárolhatunk számokat, szövegeket, vagy akár vegyesen is mindkettőt.
# Létrehozunk egy listát a diákok neveivel
diakok = ["Anna", "Béla", "Cecil", "Dénes"]
# Létrehozunk egy listát számokkal
pontszamok = [85, 92, 78, 99, 65]
Az elemek elérése (Az indexelés szabálya): Hogyan tudjuk kivenni a listából, mondjuk Bélát? Itt jön a programozás egyik legfontosabb, de kezdőként furcsa szabálya: a számítógép mindig nullától (0) kezd el számolni!
Ezt hívjuk indexelésnek. A lista első elemének indexe 0, a másodiké 1, a harmadiké 2, és így tovább. Ha egy konkrét elemet akarunk elérni, a lista neve után szögletes zárójelbe beírjuk az indexét (sorszámát).
diakok = ["Anna", "Béla", "Cecil", "Dénes"]
# Indexek: 0 1 2 3
print(diakok[0]) # Kimenet: Anna
print(diakok[2]) # Kimenet: Cecil
# A listában lévő adatokat felül is írhatjuk:
diakok[1] = "Bence" # Béla nevét kicseréltük Bencére
Tipp: A Pythonban "visszafelé" is lehet számolni. Ha a legutolsó elemet akarod megkapni anélkül, hogy tudnád, milyen hosszú a lista, használd a
-1indexet! (Pl.print(diakok[-1])a "Dénes" szót adja vissza).
6.2. Listák bejárása (A for ciklus ereje)
A listák és a ciklusok (főleg a for ciklus) a legjobb barátok. Ha a lista minden elemén végig akarunk menni (például mindenkinek a nevét ki akarjuk írni a képernyőre), a Python egy rendkívül olvasható, angolszerű megoldást kínál:
tantargyak = ["Matek", "Fizika", "Informatika", "Történelem"]
# "Minden egyes 'targy' esetén a 'tantargyak' listában:"
for targy in tantargyak:
print(f"Ma {targy} óránk lesz.")
targy változóba, lefuttatja a kiíratást, majd lép a következőre, egészen a lista végéig.
6.3. Lista hossza: A len() függvény
Gyakran előfordul, hogy tudnunk kell, pontosan hány elem van egy listában (például hány diák írt dolgozatot). Erre szolgál a len() (az angol length, azaz hossz szóból) függvény.
nevek = ["Péter", "Gergő", "Kata"]
hossz = len(nevek)
print(f"A listában {hossz} név található.") # Kimenet: A listában 3 név található.
6.4. Listák módosítása (A legfontosabb metódusok)
A program futása közben a listánk gyakran változik: új elemeket adunk hozzá, vagy éppen törlünk belőle. Ezekre a feladatokra beépített parancsokat (metódusokat) használunk. A metódusokat mindig a lista neve után, egy ponttal (.) elválasztva írjuk.
| Parancs (Metódus) | Mit csinál? | Példa |
|---|---|---|
.append(elem) |
Egy új elemet hozzáad a lista legvégéhez. (Ezt fogod a legtöbbször használni!) | nevek.append("Zoli") |
.insert(index, elem) |
Egy elemet beszúr egy adott helyre (indexre), a többi elemet pedig hátrébb tolja. | nevek.insert(1, "Zita") |
.remove(elem) |
Megkeresi és törli a megadott értékű elemet. (Ha több is van, csak az elsőt!) | nevek.remove("Péter") |
.pop() |
Törli és visszaadja a lista legutolsó elemét. Ha adsz neki egy indexet, azt törli (pl. pop(0)). |
nevek.pop() |
.clear() |
Teljesen kiüríti a listát, minden elemet töröl. | nevek.clear() |
.sort() |
Ábécé vagy nagyság szerinti növekvő sorrendbe rendezi a lista elemeit. | nevek.sort() |
Példa a hozzáadásra és törlésre:
bevasarlo_lista = ["Tej", "Kenyér"]
bevasarlo_lista.append("Vaj") # Bekerül a Vaj a végére
bevasarlo_lista.remove("Kenyér") # Vettünk kenyeret, kihúzzuk a listáról
print(bevasarlo_lista) # Kimenet: ['Tej', 'Vaj']
6.5. A szövegek (stringek) is listák!
Egy érdekesség: a Python a szövegeket valójában a háttérben karakterek (betűk) listájaként kezeli! Ez azt jelenti, hogy az indexelés szabályai a szövegekre is ugyanúgy vonatkoznak.
szo = "Python"
print(szo[0]) # Kimenet: P (a nulladik betű)
print(szo[1]) # Kimenet: y (az első betű)
# Végig is mehetünk a betűkön egy ciklussal:
for betu in szo:
print(betu)
💻 Feladatok
- A te listád: Hozz létre egy listát, amelyben 4 kedvenc ételed nevét tárolod! Írasd ki a képernyőre a lista harmadik elemét (emlékezz az indexelés szabályára)!
- Bevásárlás szimulátor:
- Hozz létre egy üres listát:
kosar = [] - Használd az
.append()metódust, és adj hozzá 3 tetszőleges terméket a kosárhoz! - Egy
forciklus és az f-string segítségével írasd ki a képernyőre szépen sorban a termékeket, például így: "A kosárban van: Alma". - Listák és ciklusok (Kihívás): Készíts egy
szamok = [2, 5, 8, 10, 3]listát! Írj egyforciklust, amely végigmegy ezen a listán, és minden számot megszoroz kettővel, majd az eredményt kiírja a képernyőre!