Python: lista

Programozás Python

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.

+ 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.)


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)

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ényMit 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!

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?

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.