Kihagyás

Szerkesztés alatt!

Az oldal további része szerkesztés alatt áll, a tartalma minden további értesítés nélkül többször, gyakran, jelentősen megváltozhat!

Listák

Tartalom

A Python list és tuple adattípusa, és listafeldolgozó függvények. Feladatmegoldások list és listabejárás segítségével.

Összetett adattípusok

Eddigi tanulmányaink során adatok tárolására nagyrészt olyan adattípusokat használtunk, amik egyszerre csak egy érték tárolására voltak alkalmasak (például: int,float stb.) egy változón belül. (A sztringek kicsit kilógnak ebből a sorból, hiszen egy sztring az több karakterből áll, ennek ellenére egy sztringet egy értéknek tekinteni nem tűnik teljesen agyament ötletnek.) Összetettebb adattípusok használatával el tudjuk érni, hogy egy változón belül több értéket is tudjuk tárolni.

Listák

A Python list adattípusával értékek sorozatát tudjuk tárolni. Egyelőre sztringek listáival foglalkozunk, később majd látjuk, hogy igazából egy lista bármilyen értékeket tartalmazhat.

Lista létrehozása

A listákat szögletes zárójelekkel ([ és ]) hozzuk létre, és az elemeket vesszővel választjuk el egymástól. A szögletes zárójel párt használjuk majd a későbbiekben a listák inexelésére (hasonlóan a sztringekhez).

Szövegeket tartalmazó lista létrehozása
1
2
3
4
5
6
7
gyumolcsok = ["alma", "korte", "szilva"]

elem_1 = "helium"
elem_2 = "magnesium"
elem_3 = "arany"

elemek = [elem_1, elem_2, elem_3] # egy olyan lista, ami az elem_1, elem_2 és elem_3 értékeit tartalmazza

Üres lista ([]) létrehozására használható a list() függvény is.

Üres lista létrehozása
1
2
ures_lista = []  # Üres lista
empty_list = list() # Üres lista
A list() függvény

Listákat alapvetően szögletes zárójelek használatával adhatunk meg, de érdemes tudni, hogy van egy beépített list() függvény is, amelynek segítségével listákat hozhatunk létre. A list() függvény tulajdonképpen egy konstruktor, amelynek a feladata egy list típusú érték létrehozása. Ha nem adunk neki argumentumot, akkor egy üres listát hoz létre. Kaphat viszont argumentumként egy másik listát (de akár például halmazt, intervallumot is), amely esetben egy olyan új listát hoz létre, amely az argumentum értékeit tartalmazza.

Lista elemeinek elérése, módosítása

A lista elemeit indexelés segítségével érhetjük el. Pythonban indexelésre a [] (subscript) operátort használhatjuk, és az indexelés 0-tól kezdődik, tehát a lista első eleme a 0. indexen van. Az indexek segítségével módosíthatjuk is a lista tartalmát.

Lista indexelése
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
auto_markak = ["Mercedes", "Skoda", "BMW", "Honda"]

# 0. indexű elem elérése
elso_elem = auto_markak[0]  # "Mercedes"
print(elso_elem)

# 2. indexű elem módosítása
auto_markak[2] = "Ford"
print(auto_markak)  # ["Mercedes", "Skoda", "Ford", "Honda"]

utolso_elem = auto_markak[3] # amennyiben azt írnánk, hogy auto_markak[4], akkor hibát kapunk
print(utolso_elem) # "Honda"

Az indexelés során negatív indexeket is megadhatunk, ezeket a Python úgy kezeli, mintha a lista végéről indulnánk. A -1 index például a lista utolsó elemét jelöli, a -2 az utolsó előttit, stb.

Negatív indexek
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
auto_markak = ["Mercedes", "Skoda", "BMW", "Honda"]

# az utolsó elem elérése
utolso_elem = auto_markak[-1]  # "Honda"
print(utolso_elem)

# 2. indexű elem módosítása
auto_markak[-2] = "Ford"
print(auto_markak)  # ["Mercedes", "Skoda", "Ford", "Honda"]

elso_elem = auto_markak[-4]
print(elso_elem) # "Mercedes"
Nem létező indexek

Ha a [] operátornak érvénytelen indexet adunk (pl. a lista hosszánál nagyobbat), akkor a művelet hibát fog dobni.

Az in és not in operátor használható annak ellenőrzésére, hogy egy érték szerepel-e a listában.

Az in és not in használata
1
2
3
4
5
auto_markak = ["Mercedes", "Skoda", "BMW", "Honda"]

"Skoda" in auto_markak       # True
"Ford" in auto_markak        # False
"Toyota" not in auto_markak  # True

Lista bejárása

A listák feldolgozásánál elég gyakran van szükség arra, hogy a lista elemeit (sorban) bejárjuk (és az éppen aktuálisan vizsgált listaelemmel valamilyen műveletet végezzünk). Ezt egy for ciklus segítségével könnyen meg tudjuk tenni:

Lista bejárása for in lista szerkezettel

A for a listaelemeket mindig a lista elejétől a végéig, sorrendben járja be.

Lista elemeinek egyszerű bejárása for-in segítségével

1
2
3
4
napok = ["hetfo", "kedd", "szerda", "csutortok", "pentek", "szombat", "vasarnap"]

for nap in napok:
    print(nap)
A fenti példa kimenete:
1
2
3
4
5
6
7
hetfo
kedd
szerda
csutortok
pentek
szombat
vasarnap

Metódusok listákon

A lista hossza - len()

A len() visszaadja a lista elemeinek számát.

A lista hossza
1
2
sportok = ["foci", "jegkorong", "kosarlabda"]
print(len(sportok))  # 3

Elem keresése - index()

Az index metódus használható annak ellenőrzésére, hogy egy érték szerepel-e a listában.

Az index használata
1
2
3
4
auto_markak = ["BMW", "Mercedes", "Skoda", "Honda"]

auto_markak.index("Honda")     # 3
bool(auto_markak.index("BMW")) # Stereotype ;)

Elem hozzáadása - .append()

Az .append() metódussal egy új elemet adhatunk hozzá a lista végére.

Az .append() metódus használata
1
2
3
honapok = ["JAN", "FEB", "MAR"]
honapok.append("APR")
print(honapok)  # ["JAN", "FEB", "MAR", "APR"]

A .pop() metódussal eltávolíthatjuk a lista egy adott indexű vagy utolsó elemét.

A .pop() metódus használata
1
2
3
4
5
6
7
honapok = ["JAN", "FEB", "MAR", "APR", "MAJ", "JUN", "JUL"]
h = honapok.pop()
print(h, '/', honapok)  # "JUL" / ["JAN", "FEB", "MAR", "APR", "MAJ", "JUN"]
h = honapok.pop(0)
print(h, '/', honapok)  # "JAN" / ["FEB", "MAR", "APR", "MAJ", "JUN"]
h = honapok.pop(2)
print(h, '/', honapok)  # "APR" / ["FEB", "MAR", "MAJ", "JUN"]

Feladatok

1. feladat

Hozz létre egy listát gyumolcsok néven, amely a következő szövegeket tartalmazza: ['sarkanygyumolcs', 'szolo', 'szilva', 'granatalma', 'mango', 'lichi']. Majd:

  1. Írd ki a lista hosszát!
  2. Írd ki a lista legelső elemét és harmadik elemét!
2. feladat

Hozz létre egy nevek nevű listát, amely a következő számokat tartalmazza: ['Bela', 'Julcsi', 'Mark']. Majd:

  1. Adj hozzá egy új nevet a lista végére.
  2. Írd ki a lista tartalmát elemenként, hogy minden elem új sorban legyen.
3. feladat

Olvass be egy listába sorokat a standard inputról. Az input végét az üres sor jelzi (ez már nem lesz része a listának).

  1. Először írasd ki azokat a sorokat, amelyben egyetlen szó van (nincs szóköz).
  2. Utána írd ki azokat a sorokat, amelyben több szó van (van szóköz).