Kihagyás

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 -1 indexet! (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.")
A gép automatikusan elindul a lista elejéről, egyesével kiveszi az elemeket, beleteszi őket a 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

  1. 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)!
  2. Bevásárlás szimulátor:
  3. Hozz létre egy üres listát: kosar = []
  4. Használd az .append() metódust, és adj hozzá 3 tetszőleges terméket a kosárhoz!
  5. Egy for ciklus é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".
  6. Listák és ciklusok (Kihívás): Készíts egy szamok = [2, 5, 8, 10, 3] listát! Írj egy for ciklust, amely végigmegy ezen a listán, és minden számot megszoroz kettővel, majd az eredményt kiírja a képernyőre!