9. Adattípusok (Összetett adatszerkezetek)
A korábbi fejezetekben már megismerkedtünk az alapvető adattípusokkal (számok, szövegek, logikai értékek) és a listákkal. A Python azonban más, különleges "dobozokat" is kínál nekünk arra az esetre, ha speciális módon szeretnénk tárolni és kezelni az adatainkat.
Ebben a fejezetben megismerkedünk a szövegek haladó kezelésével, valamint három új, rendkívül hasznos adatszerkezettel: a tuple-lel, a halmazzal és a szótárral.
9.1. Szövegek haladó kezelése és a Szeletelés (Slicing)
A szövegekről (stringekről) már megtanultuk, hogy a Python valójában karakterek listájaként kezeli őket, így az indexelés szabályai (a nullától való számolás) itt is érvényesek. De mi van akkor, ha nem csak egyetlen betűt, hanem egy egész töredéket szeretnénk kivágni a szövegből? Erre való a szeletelés (slicing).
A szeletelésnél a szögletes zárójelbe egy [mettől : meddig] formátumot írunk. Fontos: a "meddig" sorszámú (indexű) karakter már nem kerül bele az eredménybe!
szo = "Programozás"
# Kivágjuk a 0., 1. és 2. karaktert (a 3. már nem lesz benne!)
print(szo[0:3]) # Kimenet: Pro
# Ha nem írunk kezdőértéket, automatikusan a szöveg elejétől indul
print(szo[:4]) # Kimenet: Prog
# Ha nem írunk végértéket, elmegy a szöveg legvégéig
print(szo[4:]) # Kimenet: ramozás
Néhány hasznos beépített szövegmetódus:
* .upper(): Csupa nagybetűssé alakítja a szöveget. (pl. "alma".upper() -> "ALMA")
* .lower(): Csupa kisbetűssé alakítja.
* .replace("mit", "mire"): Kicserél egy szót vagy betűt a szövegben. (pl. "kismacska".replace("kis", "nagy") -> "nagymacska")
9.2. A Tuple (A megváltoztathatatlan lista)
A tuple (magyarul gyakran hívják hármasnak, sorozatnak vagy fix listának) szinte teljesen úgy működik, mint egy lista, egyetlen hatalmas különbséggel: a létrehozása után az elemei többé nem módosíthatók! Nem adhatsz hozzá újat, nem törölhetsz belőle, és nem írhatod felül a már meglévő értékeit.
A tuple-t szögletes helyett sima kerek zárójellel () hozzuk létre.
# Létrehozunk egy tuple-t a hét napjaival (hiszen ezek úgysem változnak)
napok = ("Hétfő", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat", "Vasárnap")
print(napok[1]) # Az indexelés itt is működik! Kimenet: Kedd
# napok[1] = "Péntek" <-- EZ HIBÁT OKOZNA! A tuple nem módosítható.
9.3. A Halmaz (Set)
A halmaz (set) a matematikából ismert koncepcióra épül. Két nagyon fontos szabálya van: 1. Nincsenek benne ismétlődések: Egy elem csak egyszer szerepelhet benne. 2. Nincs sorrend: A halmaz elemeinek nincs indexe (nem lehet lekérni a nulladik elemet), az adatok teljesen "ömlesztve" vannak benne.
A halmazokat kapcsos zárójellel {} hozzuk létre.
# Létrehozunk egy halmazt
szamok = {1, 2, 3, 3, 3, 4, 5}
# Bár a 3-ast szándékosan többször is beleírtuk, a halmaz automatikusan kidobja a másolatokat!
print(szamok) # Kimenet: {1, 2, 3, 4, 5}
# Elemek hozzáadása és törlése (mivel nincs index, a konkrét értéket kell megadni):
szamok.add(6)
szamok.remove(2)
9.4. A Szótár (Dictionary)
A szótár (dictionary, röviden dict) a Python egyik legerősebb és leggyakrabban használt adatszerkezete.
Míg a listáknál az elemeket a sorszámukkal (indexükkel: 0, 1, 2...) értük el, a szótárban Kulcs-Érték (Key-Value) párokat tárolunk.
Pontosan úgy működik, mint egy valódi telefonkönyv: van egy kulcs (a személy neve), és tartozik hozzá egy érték (a telefonszám). Ha tudod a nevet, azonnal megkapod a hozzá tartozó számot!
A szótárakat is kapcsos zárójellel {} hozzuk létre, de a kulcsot és az értéket mindig egy kettősponttal : választjuk el.
# Létrehozunk egy szótárat egy diák adataival
diak = {
"nev": "Kovács Anna",
"kor": 16,
"osztaly": "10.B"
}
# Az értékeket az index helyett a "kulcsuk" nevével kérjük le!
print(diak["nev"]) # Kimenet: Kovács Anna
print(diak["kor"]) # Kimenet: 16
# Új adat hozzáadása vagy meglévő adat módosítása:
diak["atlag"] = 4.5
diak["kor"] = 17 # Annának születésnapja volt, felülírjuk az adatot!
print(diak)
9.5. Összefoglaló táblázat az összetett adatszerkezetekről
Hogy ne keverd össze őket, íme a négy legfontosabb szerkezet összehasonlítása:
| Név | Zárójel fajtája | Módosítható utólag? | Van sorrend (indexelés)? | Lehet benne ismétlődés? |
|---|---|---|---|---|
| Lista (List) | [ ] Szögletes |
Igen | Igen | Igen |
| Tuple | ( ) Kerek |
Nem (állandó) | Igen | Igen |
| Halmaz (Set) | { } Kapcsos |
Igen (bővíthető) | Nem | Nem |
| Szótár (Dict) | { } Kapcsos |
Igen | (Kulcsok alapján keresünk) | A Kulcs nem ismétlődhet! |
💻 Feladatok
- Szövegszeletelés: Hozz létre egy változót a
titok = "xYzA_Python_Jó_Nyelv_89"szöveggel! A szeletelés ([mettől:meddig]) segítségével vágd ki belőle csak a"Python_Jó_Nyelv"részt, és írasd ki a képernyőre! (Tipp: számold ki manuálisan, hanyadik indextől hanyadik indexig tart ez a rész!) - Duplikációk szűrése (Halmaz): Adott egy lista, amelyben a diákok felsorolták a kedvenc színeiket, de rengeteg benne az ismétlődés:
szinek_listaja = ["kék", "piros", "kék", "zöld", "piros", "sárga", "zöld"]. Alakítsd át ezt a listát egy halmazzá aset()függvény segítségével, majd írasd ki a képernyőre, hogy lásd: minden szín csak egyszer maradt meg! - Digitális telefonkönyv (Szótár):
- Hozz létre egy üres szótárat
telefonkonyv = {}néven! - Adj hozzá három nevet kulcsként, és hozzájuk tetszőleges telefonszámokat (szövegként) értéknek! (pl.
telefonkonyv["Peti"] = "06201234567") - Írasd ki egyetlen
printés egy f-string segítségével az egyik ismerősöd nevét és telefonszámát úgy, hogy az adatokat közvetlenül a szótárból olvasod ki!
- Hozz létre egy üres szótárat