A listák összetett adattípusok. Segítségükkel adatokat tudunk rendezett formában tárolni. Másképp fogalmaza, egy változóban több elemet tárolnak. A listák dinamikusak, méretük és tartalmuk módosítható. Általánosan hogyan néz ki egy lista?
Van egy neve, amelyben felsorolhatjuk az elemeit. pl: napok[„hétfő”, „kedd”]
A lista elemei sorszámozottak(indexelt), a számozásuk 0-val kezdődik, és elemszám-1-ig tart. A lista tartalmazhat ismétlődő elemeket is. A lista elemei lehetnek eltérő típusúak is. A lista elemeit vesszővel választjuk el egymástól. A lista elemeire az indexükkel lehet hivatkozni. A lista első eleme a 0. indexű elem: listam[0] az utolsó ötödik elemének index 4, de ezt így nem használjuk! Könnyebb, ha hátulról nézzük, ebben az estben -1 az utolsó elem indexe, mindig!
listam = ["hétfő", "kedd", "szerda", "kedd", 2022] print(listam) print listam[0] print listam[4] # vagy print listam[-1]
Egy lista elem értékét felül tudjuk írni. pl. az első elemnek adjunk új értéket: listam[0] = „vasárnap”. De adhatunk új értéket egyszerre több elemnek is… listam[1:3] = „új érték1″,”új érték 2”. Próbáld ki!
A listánál is használhatunk range-et, tehát meg tudjuk adni mettől meddig akarjuk kiíratni a lista elemeit. Írjuk ki a hétköznapokat. (0. elemtől kezd, a 4-es az utolsó amit kiír) Itt is el lehet hagyni a kezdő illetve a záró indexet. Röviden: print(napok[:5]) ez alapból 0 index-szal kezd, az ötösig megy, de az ötös nincs benne ugybár. Ha csak a hétvégi napokat akarom kiíratni: print(napok[5:]) tehát az ötös indextől a végéig megy
napok = ["hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat", "vasárnap"] print(napok[0:5]) print(napok[:5]) # "hétfő", "kedd", "szerda", "csütörtök", "péntek" print(napok[5:]) # "szombat", "vasárnap"
len: lista elemszámát adja meg. pl: print(len(napok)) Ezt is felhasználhatjuk a lista utolsó elemének kiíratásához: print(lista[len(lista)-1]) tehát lista elemszáma-1 az utolsó elem indexe. Azt meg néztük, hogy az x. elem az lista[x] ebből lett ez: lista[len(lista)-1] Értjük.
listaelem(ek) mentése változóba: azt megnéztük hogyan tudjuk kiíratni őket, ugyanezen az elven el is lehet menteni őket változókba. Ehhez természetesen használhatunk ciklusokat is, majd nézzünk később rá példát.
adatok["Kis Pista","10.F","info"] nev,evfolyam,tantargy=adatok # a lista elemeit rendeljük hozzájuk print(nev, evfolyam, tantargy)
lista elemeinek kiíratása for ciklussal, más néven lista bejárása. Első körben egyszerűen, utána hasonlóan, mint a c#-ban, a lista hosszáig megyünk, és indexet növeljük egyesével:
napok = ["hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat", "vasárnap"]
for v in napok:
print(v)
#rövidebben:
[print(x) for x in napok]
#indexet számolva
napok = ["hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat", "vasárnap"]
for i in range(len(napok)):
print(napok[i])
in kulcsszó: segítségével meg tudjuk határozni, hogy egy keresett elem benne van-e a listában, illetve segít a listák elemein végigmenni. not in: az in tagadása
napok = ["hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat", "vasárnap"]
if "kedd" in napok:
print("Igen, benne van!")
else:
print("Nincs bene a keresett szó")
lista elemeinek kiíratása while ciklussal, mert miért ne. Na meddig megyünk? Amíg i < mint a napok lista hossza, itt is egyesével számolunk le vele.
napok = ["hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat", "vasárnap"] i = 0 while i < len(napok): print(napok[i]) i = i + 1
append: Új elem beszúrása a lista végére.
napok = ["hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat", "vasárnap"]
napok.append("egy nyolcadik nap")
print(napok)
insert: Új elem beszúrása x.indexű helyre. Tegyük fel beírtam hibásan a hétköznapokat, és kihagytam a szerdát ezt szeretném javítani. Akkor a 2. indexű elem helyére kéne beszúrni. lista.insert(2, „szerda”) Egyszerű.
hetkoznapok= ["hétfő", "kedd", "csütörtök", "péntek", ] hetkoznapok.insert(2, "szerda") print hetkoznapok
extend: Egy másik iterálható objektum (pl. egy másik lista) elemeit adja hozzá az eredeti lista végéhez.
|
1 2 3 |
lista_a = [1, 2]; lista_b = [3, 4]; lista_a.extend(lista_b) # kimenet [1, 2, 3, 4] |
+ operator: két lista elemeiből egy új listát hoz létre. (Fontos különbség az extend-hez képest, hogy ez nem módosítja az eredeti listákat.)
|
1 2 3 4 |
a = [1, 2]; b = [3, 4]; c = a + b # c lesz [1, 2, 3, 4] |
Listák elemeinek összevonása:
extend: hozzáadhatjuk egy lista elemeit egy másikhoz. Tehát kibővítem a hétköznapokat a hétvégéve mondjuk. Ugyanezt meg lehet csinálni összeadással is: lista3=lista2+lista1 Használhatjuk az append-et is!
hetnapjai= ["hétfő", "kedd", "szerda", "csütörtök", "péntek", ] hetvege = ["szombat" , "vasárnap"] hetnapjai.extend(hetvege) print(hetnapjai) # összeadva: hetnapjai = hetnapjai + hetvege #append: a hetvege lista elemeit hozzáfűzi a hetnapjai listához for x in hetvege: hetnapjai.append(x)
Lista elemeinek törlése. Elemet törölhetünk érték és index szerint is.
remove() Elem törlése a listából érték szerint. (ha több ugyanolyan van, az elsőt törli)
Töröljük pl, a keddet!
napok = ["hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat", "vasárnap"]
napok.remove("kedd")
print(napok)
pop() vagy del() Elem törlése index szerint. Töröljük megint a keddet, de most az indexe alapján. Mennyi? 1 Ha nem adunk meg neki indexet, akkor az utolsó elemet törli.
napok = ["hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat", "vasárnap"] napok.pop(1) print(napok)
Meguntad a napok listát, tele van vele a …? Nyírjuk ki, ott egye meg a fene 🙂 ! A del erre is jó! del napok Ennyi, vó’t nincs!
clear() A clear utasítás a lista elemeit törli, magát a listát nem!
listából elemek másik listába feltétel alapján: Tegyük fel, hogy szerenénk kigyűjteni a napjaink közül az „a” betűt tartalmazókat!
napok = ["hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat", "vasárnap"]
ujlista = []
for x in napok:
if "a" in x:
ujlista.append(x)
print(ujlista)
Lista elemeinek sorbarendezése
Rendezés: lista elemeinek rendezése abc sorrendbe. sort() Alapesetben növekvő sorrendbe rendez. Számokat is!
napok = ["hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat", "vasárnap"] napok.sort() print(napok) szamok= [100, 50, 65, 82, 23] szamok.sort() print(szamok)
Rendezés csökkenő sorrendbe: lista.sort(reverse = True)
szamok= [100, 50, 65, 82, 23] szamok.sort(reverse = True) print(szamok)
A sort függvény a kis és nagybetűket megkülönbözteti! Ha szeretnénk ezt elkerülni, használjuk a következő paraméterekkel: sort(key = str.lower)
reverse: lista elemeinek kiíratása fordított sorrendben. Ez nem rendez, ez csak a sorrendet változtatja meg!
copy avagy lista másolása. Leírása: masolat= lista.copy()
Például szeretném elmenteni a listám eredeti állapotát, mert rendezni fogom., de szükségem van az eredetire is:
szamok= [100, 50, 65, 82, 23] szamok2 = szamok.copy() szamok.sort() print(szamok2)
Ha a listában összetett elemek (például egy másik lista, dictionary, vagy objektum) vannak, akkor a másolat és az eredeti lista ugyanarra az összetett elemre hivatkozik. Ha az összetett elemet módosítom az egyik listában, az megjelenik a másikban is. Ha valóban teljesen független másolatot szeretnék készíteni, még összetett listák esetén is, akkor a mély másolatot (deep copy) kell használni! (nem feltétlenül középisolás anyag)
|
1 2 3 4 5 6 7 8 9 10 11 12 |
import copy listak_listaja = [[1, 2], [3, 4]] # Mély másolat készítése mely_masolat = copy.deepcopy(listak_listaja) # Módosítjuk az egyik belső listát a másolatban mely_masolat[0][0] = 99 print(f"Eredeti (mély): {listak_listaja}") # [[1, 2], [3, 4]] print(f"Másolat (mély): {mely_masolat}") # [[99, 2], [3, 4]] |
Keresés listában
Hányszor szerpel egy elem a listában? Érték szerint keres a count() függvény. Pontos egyezés szükséges, tehát a birsalma nem számít!
gyumolcsok = ["alma", "birsalma", "citrom", "málna", "banán"]
x = gyumolcsok.count("alma")
print(x)
szamok= [100, 50, 65, 82, 23]
y = szamok.count(50)
print(y)
Nézzük meg egy adott elem indexét! Szintén elég gyakori feladat. Az első megtalált elem indexét adja vissza!
# az alma indexe 0 lesz
gyumolcsok = ["alma", "birsalma", "citrom", "málna", "banán"]
x = gyumolcsok.index("alma")
print(x)
# az 50 indexe 1 lesz
szamok= [100, 50, 65, 82, 23, 50]
y = szamok.index(50)
print(y)
Listák egymásba ágyazása
Egy lista tartalmazhat listákat is elemként! Nézzünk egy példát: megmérjük naponta 3x az informatika tanterem hőmérsékletét, (8,10,12 óra) és elmentjük az adatokat. Írassuk ki a hétfői hőmérsékletet! Írassuk ki a szerda 10 órait is! Erre 2db indexxel lehet hivatkozni: lista x. eleme, azon belül y.elem: heti_homerseklet[2][1]
Írassuk ki az egész héten mért hőfokokat is!
heti_homerseklet = [[18,19,17],[20,19,18],[18,17,18],[22,20,17],[16,17,15]]
hetfoi = heti_homerseklet[0]
print(hetfoi) #vagy simán print(heti_homerseklet[0])
#szerda 10 órai az a 2-es indexű lista elem 1-es indexe
print("szerda 10:00: ",heti_homerseklet[2][1],"c°")
i=1
for nap in heti_homerseklet:
print("\n",i,"nap", end=" ")
i+=1
for m in nap:
print(m,"c°",end=" ")
# másik módszer, 1db for ciklussal, 3 változóba mentve a napi adatokat
i=1
for nap in heti_homerseklet:
print(i," nap", end=" ")
i+=1
r,d,e = nap
print(r,"c°",d,"c°",e,"c°")
Listák egyesítése
Több módszerrel is egyesíthetünk listákat. A legegyszerűbben a + operátorral. Ebben az esetben csináltunk egy új listát, lista3 néven.
Használhatjuk az append-et is, tehát végigmegyünk az egyik lista minden elemén, és hozzáadjuk a másikhoz őket.
Harmadik módszer, hogy a lista1-hez adjuk a lista2 elemeit az lista.extend segítségével.
lista1 = ["hétfő", "kedd", "szerda"] lista2 = [10, 20, 30] lista3 = lista1 + lista2 print(lista3) #második módszer, append: for x in lista2: lista1.append(x) print(lista1) #harmadik módszer, extend: lista1 = ["hétfő", "kedd" , "szerda"] lista2 = [10, 11, 12] lista1.extend(lista2) print(lista1)
| Függvény | Mit csinál? |
| append() | Új elem hozzáadása a listához, a lista végére |
| clear() | Összes elem törlése a listából |
| copy() | Lista másolása |
| count() | Megadott tulajdonságú elemek megszámlálása |
| extend() | Elem hozzáadása a lista végéhez |
| index() | Visszaadja az első elem indexét, ami megadott tulajdonságú |
| insert() | Megadott helyre tesz be új elemet a listába |
| pop() | Törli a megadott indexű elemet |
| remove() | Törli a megadott értékű elemet. |
| reverse() | Elemek kiíratása fordított sorrendben. (nem rendez) |
| sort() | Lista elemeinek sorba rendezése |
Példák,feladatok:
Feladat: elemek értékének duplázása
Készítsünk egy új listát, amibe az eredeti lista elemeinek a kétszeresét mentsük el!
Az eredeti listából válogassuk ki egy másikba a páros számokat!
lista = [100, 50, 65, 82, 23] eredmeny = [x * 2 for x in lista] paros_szamok = [x for x in lista if x % 2 == 0] print(lista) print(eredmeny) print(paros_szamok)
Feladat: indián nevek
Készítsünk indián neveket 2db lista segítségével! Mindkettő listából válasszunk ki véletlenszerűen egy-egy nevet, majd írassuk ki!
|
1 2 3 4 5 6 |
import random vnev = ["Síró", "Üvöltő", "Kicsi", "Nagy", "Lángoló", "Száguldó", "Vergődő", "Szárnyaló"] knev = ["Medve", "Szellő", "Szikla", "Virág", "Sas", "Bölény", "Nyíl"] v = random.choice(vnev) k = random.choice(knev) print(f"{v} {k}") |
Időjárás
Egy a hegyekben dolgozó, 1800m magasra is feljáró kamionos ismerősöd megkért, készíts számára időjárás előrejelzést decemberre. (december 31 napos) Mivel sok a hiteltörlesztő részlete, ezért decemberben minden nap dolgozni fog.
Tölts fel egy listát véletlenszerűen ’*’ és ’#’ karakterekkel vegyesen! A ’*’ havazást és havas utakat jelent, a ’#’ normálisan járható utat. Havazásnál a hegyi szakaszon hóláncot kell tenni a nyerges vontatóra.
Segíts a kamionos ismerősnek, a program válaszolja meg a következő kérdéseket!
Írasd ki a decemberi előrejelzést!
December 20-án várható-e hóesés?
Hányszor kell hóláncot feltennie a kamionra?
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import random december = [] db = 0 for i in range(31): idojaras = random.randint(1, 2) if idojaras == 1: december.append("#") print("#", end="") else: december.append("*") print("*", end="") db += 1 print(f"\nEnnyi nap lesz csúszós az út, hólánc szerelés: {db}") if december[19] == "*": print("December 20-án hóesés várható") else: print("December 20-án csúszós út várható") |
Listákat tartalmazó listák (multidimenziós lista)
Ebben a példában minden listaelem egy-egy 3 elemű lista.
Az első autó sebessége: mivel 0-val kezdődik a listaelemek számozása, így 0, a listaelemen belül szintén 0-tól indul a számozás, tehát a sebesség az a 2. elem lesz! Tehát: autok[0][2]
#Autók adatai rendszám, márka, sebesség
autok = [
['ABC-123','Fiat',48],
['DBA-223','Ford',64],
['JTJ-873','Kia',99],
['PBA-888','Lada',100],
]
print("Első autó sebessége: ",autok[0][2])
print("Második autó, és rendszáma: ",autok[1][1],autok[1][0])
print("Hány db autó van a listában?", len(autok))
print("Gyorshajtók rendszámai: ")
for auto in autok:
if auto[2] > 50:
print(auto[0],end=' ')
print("Van-e Lada a listában?")
van = 0
for auto in autok:
if auto[1] == "Lada":
print("Igen, van!")
van = 1
break
if van==0:
print("Nincs ilyen autó a listában!")
Feladat: Készíts Python programot! Legyen benne két lista – vezetéknevek és keresztnevek. Mindkét listában legyen 5-5 név. Készíts a két lista elemeiből egy harmadik listát, véletlenszerűen összefűzve a neveket! Tehát 1 vezetéknévhez legyen társítva egy random keresztnév!
+Készítsd el az összes lehetséges kombinációt! (itertools függvény)
rint(vezeteknevek)
print(keresztnevek)
harmadik_lista = []
for vezeteknev in vezeteknevek:
random_keresztnev = random.choice(keresztnevek)
harmadik_lista.append(f"{vezeteknev} {random_keresztnev}")
keresztnevek.remove(random_keresztnev) # Ne ismételjük meg ugyanazt a keresztnév többször
print("Harmadik lista:")
for nev in harmadik_lista:
print(nev)
#összes lehetséges kombináció
import itertools
#listák ugyanazok
for vezeteknev, keresztnev in itertools.product(vezeteknevek, keresztnevek):
harmadik_lista.append(f"{vezeteknev} {keresztnev}")
print("Harmadik lista:")
for nev in harmadik_lista:
print(nev)
Frissítve: 2025.11.05.
