Python Adatszerkezetek
Miért fontosak az adatszerkezetek?
Az adatszerkezetek a programozás alapvető építőkövei, amelyek segítenek az adatok hatékony tárolásában és kezelésében. A Python három alapvető beépített adatszerkezetet kínál: a listát, a tuple-t és a halmazt.
Lista (list)
Módosítható, rendezett adatszerkezet. Ideális amikor az elemek sorrendje fontos és az adatok változhatnak.
szamok = [1, 2, 3]
szamok.append(4) # [1, 2, 3, 4]
szamok[0] = 10 # [10, 2, 3, 4]
Tuple
Nem módosítható, rendezett adatszerkezet. Tökéletes választás, amikor az adatok nem változhatnak.
koordinatak = (10, 20)
x, y = koordinatak # Kicsomagolás
# koordinatak[0] = 30 # Hiba!
Halmaz (set)
Rendezetlen, egyedi elemeket tartalmazó adatszerkezet. Ideális ismétlődő elemek kiszűrésére.
szinek = {"piros", "kék", "piros"}
print(szinek) # {"piros", "kék"}
szinek.add("zöld")
Próbáld ki!
Listák (List)
A lista működése
A lista egy rendezett, módosítható adatszerkezet a Pythonban. Különböző típusú elemeket tartalmazhat, és számos beépített művelet érhető el hozzá.
Szintaxis
# Lista létrehozása
lista1 = [] # Üres lista
lista2 = [1, 2, 3] # Számok listája
lista3 = ["alma", "körte"] # Szövegek listája
lista4 = [1, "alma", True] # Vegyes típusok
Alapvető műveletek
Hozzáférés elemekhez
# Elemek elérése
lista = [10, 20, 30, 40, 50]
print(lista[0]) # Első elem: 10
print(lista[-1]) # Utolsó elem: 50
print(lista[1:3]) # Szeletelés: [20, 30]
Lista bővítése
# Elemek hozzáadása
lista = [1, 2, 3]
lista.append(4) # [1, 2, 3, 4]
lista.insert(0, 0) # [0, 1, 2, 3, 4]
lista.extend([5, 6]) # [0, 1, 2, 3, 4, 5, 6]
Lista módosítása
# Elemek módosítása és törlése
lista = [1, 2, 3, 4, 5]
lista.remove(3) # [1, 2, 4, 5]
del lista[0] # [2, 4, 5]
lista.pop() # [2, 4]
Lista műveletek
# Lista műveletek
lista = [3, 1, 4, 1, 5]
print(len(lista)) # Hossz: 5
lista.sort() # [1, 1, 3, 4, 5]
lista.reverse() # [5, 4, 3, 1, 1]
print(lista.count(1)) # 1-esek száma: 2
Tuple (n-es)
A tuple működése
A tuple egy olyan adatszerkezet, amely rendezett és nem módosítható elemeket tartalmaz. Hasonlít a listához, de miután létrehoztuk, nem lehet megváltoztatni az elemeit. Gyakran használjuk olyan adatok tárolására, amelyeknek nem szabad változniuk a program futása során.
Szintaxis
# Tuple létrehozása
tuple1 = () # Üres tuple
tuple2 = (1, 2, 3) # Számok tuple-je
tuple3 = ("alma", "körte") # Szövegek tuple-je
tuple4 = (1,) # Egyelemű tuple - vessző kötelező!
tuple5 = 1, 2, 3 # Zárójelek opcionálisak
(1,)
x = 1, 2, 3
Alapvető műveletek
Hozzáférés elemekhez
# Elemek elérése (ugyanúgy mint listáknál)
koordinatak = (10, 20, 30, 40)
print(koordinatak[0]) # Első elem: 10
print(koordinatak[-1]) # Utolsó elem: 40
print(koordinatak[1:3]) # Szeletelés: (20, 30)
Tuple kicsomagolás
# Tuple kicsomagolás
pont = (100, 200)
x, y = pont # Kicsomagolás
print(f"x = {x}, y = {y}")
# Kibővített kicsomagolás
szamok = (1, 2, 3, 4, 5)
elso, *kozepso, utolso = szamok
print(kozepso) # [2, 3, 4]
Tuple műveletek
# Tuple műveletek
t1 = (1, 2, 3)
t2 = (4, 5, 6)
print(t1 + t2) # Összefűzés: (1, 2, 3, 4, 5, 6)
print(t1 * 2) # Ismétlés: (1, 2, 3, 1, 2, 3)
print(len(t1)) # Hossz: 3
print(2 in t1) # Tartalmazás: True
Konverziók
# Konverziók más típusokból/típusokká
lista = [1, 2, 3]
t1 = tuple(lista) # Listából tuple
t2 = tuple("Python") # Stringből tuple: ('P','y','t','h','o','n')
lista2 = list(t1) # Tuple-ból lista
# Rendezés workaround (mivel a tuple nem módosítható)
t3 = (3, 1, 4, 1, 5)
t4 = tuple(sorted(t3)) # Rendezett tuple
Halmaz (Set)
A halmaz működése
A halmaz (set) egy olyan módosítható adatszerkezet, amely rendezetlen és csak egyedi elemeket tartalmazhat. Kiválóan alkalmas az ismétlődő elemek kiszűrésére, és a halmazműveletek (unió, metszet, különbség) végrehajtására.
Szintaxis
# Halmaz létrehozása
halmaz1 = set() # Üres halmaz
halmaz2 = {1, 2, 3} # Számok halmaza
halmaz3 = {"alma", "körte"} # Szövegek halmaza
halmaz4 = set([1, 2, 2, 3, 3]) # Lista átalakítása halmazzá: {1, 2, 3}
Alapvető műveletek
Elemek kezelése
# Elemek hozzáadása és törlése
halmaz = {1, 2, 3}
halmaz.add(4) # {1, 2, 3, 4}
halmaz.remove(2) # {1, 3, 4} (hibát dob, ha nincs elem)
halmaz.discard(5) # Nincs hiba, ha nem létezik
halmaz.clear() # Minden elem törlése
Tartalmazás vizsgálata
# Elem keresése és tartalmazás
halmaz = {1, 2, 3, 4, 5}
print(2 in halmaz) # True
print(6 in halmaz) # False
print(len(halmaz)) # 5
for elem in halmaz: # Bejárás
print(elem)
Halmazműveletek
# Halmazműveletek
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
print(A | B) # Unió: {1, 2, 3, 4, 5, 6}
print(A & B) # Metszet: {3, 4}
print(A - B) # Különbség: {1, 2}
print(A ^ B) # Szimmetrikus diff.: {1, 2, 5, 6}
Részhalmaz vizsgálatok
# Részhalmaz vizsgálatok
A = {1, 2}
B = {1, 2, 3}
C = {1, 2, 3}
print(A.issubset(B)) # True (A ⊆ B)
print(B.issuperset(A)) # True (B ⊇ A)
print(B == C) # True (egyenlőség)
print(len(B)) # 3 (elemszám)
Adatszerkezetek összehasonlítása
Lista vs. Tuple vs. Halmaz
Lássuk az egyes adatszerkezetek főbb jellemzőit és hogy mikor melyiket érdemes használni!
Tulajdonságok összehasonlítása
Részletes összehasonlítás
Tulajdonság | Lista | Tuple | Halmaz |
---|---|---|---|
Szintaxis | [1, 2, 3] |
(1, 2, 3) |
{1, 2, 3} |
Módosíthatóság | ✅ Igen | ❌ Nem | ✅ Igen |
Rendezettség | ✅ Igen | ✅ Igen | ❌ Nem |
Ismétlődő elemek | ✅ Igen | ✅ Igen | ❌ Nem |
Indexelés | ✅ Igen | ✅ Igen | ❌ Nem |
Teljesítmény* | Átlagos | Gyors | Nagyon gyors keresés |
* A teljesítmény az adott művelet típusától függ
Mikor melyiket használjuk?
Lista
- Amikor az elemek sorrendje fontos
- Ha gyakran módosítjuk az elemeket
- Ha ugyanaz az elem többször is előfordulhat
- Például: felhasználói bemenetek tárolása, játékállások mentése
Tuple
- Amikor az adatok nem változhatnak
- Heterogén adatok tárolására
- Függvények többszörös visszatérési értékeihez
- Például: koordináták, RGB színkódok
Halmaz
- Amikor csak egyedi elemek kellenek
- Gyors kereséshez
- Halmazműveletek végrehajtásához
- Például: egyedi felhasználói ID-k tárolása
Interaktív összehasonlítás
Gyakorló feladatok
Feladatok megoldása
Az alábbi feladatok segítenek az adatszerkezetek használatának gyakorlásában. Minden feladatnál megtalálod a leírást, a példakódot, és ki is próbálhatod őket.
1. Feladat: Lista műveletek
Hozz létre egy listát számokkal, majd végezd el rajta az alábbi műveleteket: rendezés, megfordítás és minden elem megduplázása.
# Lista műveletek
szamok = [5, 2, 8, 1, 9]
# Rendezés
rendezett = sorted(szamok) # [1, 2, 5, 8, 9]
# Megfordítás
forditott = szamok[::-1] # [9, 1, 8, 2, 5]
# Minden elem duplázása
duplazott = [x * 2 for x in szamok] # [10, 4, 16, 2, 18]
Próbáld ki!
2. Feladat: Pont koordináták
Hozz létre két pontot tuple-ként (x, y koordinátákkal), majd számold ki a pontok távolságát!
import math
# Két pont koordinátái
pont1 = (0, 0)
pont2 = (3, 4)
# Távolság számítás
dx = pont2[0] - pont1[0]
dy = pont2[1] - pont1[1]
tavolsag = math.sqrt(dx**2 + dy**2)
print(f"A két pont távolsága: {tavolsag}")
Próbáld ki!
3. Feladat: Közös elemek keresése
Hozz létre két halmazt különböző elemekkel, majd keresd meg a közös elemeket, az egyedi elemeket és az összes elemet!
# Halmazok létrehozása
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
# Közös elemek (metszet)
kozos = A & B # {4, 5}
# Egyedi elemek (szimmetrikus különbség)
egyedi = A ^ B # {1, 2, 3, 6, 7, 8}
# Összes elem (unió)
osszes = A | B # {1, 2, 3, 4, 5, 6, 7, 8}
Próbáld ki!
Kombinált példák
Játékos pontgyűjtő
Ez a példa mindhárom adatszerkezetet használja: a játékosok listáját, a pontszámok tuple-jét és az egyedi teljesítmények halmazát.
# Játékos pontgyűjtő rendszer
jatekosok = ["Anna", "Béla", "Csaba"] # Lista a játékosoknak
pontszamok = (100, 150, 80) # Tuple a pontszámoknak
teljesitmenyek = {"győzelem", "vereség", "döntetlen"} # Halmaz az egyedi teljesítményeknek
def jatekos_statisztika(jatekos, pont, teljesitmeny):
"""Játékos statisztikájának kezelése"""
if jatekos in jatekosok:
index = jatekosok.index(jatekos)
print(f"Játékos: {jatekos}")
print(f"Pontszám: {pontszamok[index]}")
teljesitmenyek.add(teljesitmeny)
print(f"Lehetséges teljesítmények: {teljesitmenyek}")
else:
print("Játékos nem található!")
# Példa használat
jatekos_statisztika("Anna", 100, "győzelem")