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
A lista elemei szögletes zárójelek [] között, vesszővel elválasztva szerepelnek.
Az elemek indexelése 0-tól kezdődik.

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
Egyelemű tuple esetén a vessző kötelező: (1,)
A zárójelek általában opcionálisak: 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}
Üres halmazt nem lehet {} -vel létrehozni, mert az egy üres szótárat eredményez!
A halmaz automatikusan eltávolítja az ismétlődő elemeket.

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

graph TD A[Adatszerkezetek] --> B[Lista] A --> C[Tuple] A --> D[Halmaz] B --> B1[Módosítható] B --> B2[Rendezett] B --> B3[Ismétlődhet] C --> C1[Nem módosítható] C --> C2[Rendezett] C --> C3[Ismétlődhet] D --> D1[Módosítható] D --> D2[Nem rendezett] D --> D3[Egyedi elemek] style A fill:#2ecc71,stroke:#27ae60 style B fill:#3498db,stroke:#2980b9 style C fill:#e74c3c,stroke:#c0392b style D fill:#f1c40f,stroke:#f39c12

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")

Játékos kezelő felület

Játékos műveletek

Játékosok listája

Pontszámok

Teljesítmények

Keresés és szűrés