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!
1 2 3 4 |
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
1 2 3 4 |
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.
1 2 3 |
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:
1 2 3 4 5 6 7 8 9 10 |
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
1 2 3 4 5 |
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.
1 2 3 4 5 |
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.
1 2 3 |
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ű.
1 2 3 |
hetkoznapok= ["hétfő", "kedd", "csütörtök", "péntek", ] hetkoznapok.insert(2, "szerda") print hetkoznapok |
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!
1 2 3 4 5 6 7 8 9 10 11 |
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. Töröljük pl, a keddet! Ha többször szerepel a kedd, akkor is csak az elsőt törli!
1 2 3 |
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.
1 2 3 |
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!
1 2 3 4 5 6 7 8 |
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!
1 2 3 4 5 6 7 |
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)
1 2 3 |
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:
1 2 3 4 |
szamok= [100, 50, 65, 82, 23] szamok2 = szamok.copy() szamok.sort() print(szamok2) |
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!
1 2 3 4 5 6 7 |
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!
1 2 3 4 5 6 7 8 9 |
# 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!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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 |
Egyéb hasznos példák, listaelemek leképezése:
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!
1 2 3 4 5 6 |
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) |
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]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#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)
1 2 3 4 5 6 7 8 9 10 |
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) |
1 2 3 4 5 6 7 8 |
#ö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) |