Összetett adattípusok¶
Az összetett adattípusok olyan adattípusok, amelyek több elemet képesek tárolni egyetlen változóban.
A Pythonban az összetett adattípusok közé tartoznak a listák, halmazok és szótárak.
Lista¶
- A listák több elem tárolására szolgálnak egyetlen változóban.
- A listák Pythonban az adatgyűjtemények tárolására használt 4 beépített adattípus egyike, a másik 3 pedig a Tuple, Set és Dictionary, amelyek mindegyike eltérő minőségű és felhasználású.
- A listák szögletes zárójelekkel jönnek létre:
Lista inicializálása
- A lista elemeit [ ] zárójel közé tesszük
- Az elemeket egymás mellé írjuk vesszővel
- A lista tartalmazhat intet, stringet, boolet, floatot vegyesen
Lista adott elemének elérése¶
Egy lista adott elemét elérhetjük ha a sorszámra hivatkozunk.
A programozásban a sorszámokat \(0\)-tól kezdjük számolni, tehát az első elem sorszáma \(0\), a másodiké \(1\), stb.
Tegyük fel, hogy a cars
listában a következő elemek szerepelnek: ["Ford", "Volvo", "BMW"]
.
Ezt a listát a következő módon tudnánk táblázatosan ábrázolni:
Sorszám | 0. | 1. | 2. |
---|---|---|---|
Elem | Ford | Volvo | BMW |
Ismétlés
- A lista első eleme Pythonban a 0. elemnek felel meg!
- Tehát egy \(n\) elemű lista utolso eleme az \(n - 1\) elem.
Példa
- Van egy 100 elemű listánk, ekkor az \(n = 100\), tehát az első elem sorszáma \(0\), az utolsó elem sorszáma pedig \(n-1 = 100-1 = 99\).
- Még egy példa: Ha egy \(53\) elemű listánk van, akkor \(n = 53\), tehát az utolsó elem sorszáma: \(n-1 = 53-1 = 52\)
- Az első elem sorszáma továbbra is \(0\).
Műveletek listákkal¶
append(value)
- Hozzáad egy elemet a lista végéhezclear()
- Eltávolítja az összes elemet a listábólcopy()
- Visszaadja a lista másolatátcount(value)
- A megadott értékű elemek számát adja visszaextend(value)
- A lista bővítése egy új listávalremove(value)
- Eltávolítja az első elemet a megadott értékkelpop(value)
- Eltávolítja az adott pozíción lévő elemetsort(value)
- A-Z sorba rendezi az elemeket
Új elem hozzáadása listához¶
Új elem hozzáadáskor alaptérmezetten a lista végére kerül a beszúrásra az elem.
Elem törlése listából¶
Lista bejárása¶
Egy lista bejárását könnyen elvégezhetjük a már tanult for ciklus segítségével.
Lista bejárása számokkal¶
Számok esetében is könnyen bejárhatjuk egy for ciklussal a listánkat. Adjuk össze a lista elemeinket értéket!
Lista gyakorló feladatok¶
Szavak számlálása és első-utolsó kiírása
Kérj be egy szóközzel elválasztott szósorozatot, majd számold meg, hány szó szerepel benne! Írd ki az első és az utolsó szót is a megadott szósorozatból!
Példa
Mit kell tenned?
- Olvasd be a szavakat
- Oszd fel a szavakat szóközök mentén
- Számold meg a szavak számát
- Jelenítsd meg az első és az utolsó szót
- Írd ki az eredményeket
Számok összege
Kérj be egy szóközzel elválasztott számsorozatot, majd:
- rendezd növekvő sorrendbe
- számold ki az összegüket
- számold ki az átlagukat
Példa
Mit kell tenned?
- Olvasd be a számokat
- Alakítsd át a számokat egész számokká
- Add össze a számokat
- Jelenítsd meg az összeget
Megoldás
szamok = input("Adjon meg egy szóközzel elválasztott számsorozatot: ")
szamok = szamok.split(" ")
szamok = [int(szam) for szam in szamok] # Átalakítás egész számmá
szamok.sort() # Rendezés növekvő sorrendbe
print(f"A növekvő sorrendben rendezett számok: {szamok}")
osszeg = sum(szamok)
print(f"A megadott számok összege: {osszeg}")
atlag = osszeg / len(szamok)
print(f"A megadott számok átlaga: {atlag}")
minimum = min(szamok)
print(f"A megadott legkisebb szám: {minimum}")
maximum = max(szamok)
print(f"A megadott legnagyobb szám: {maximum}")
Halmaz (Set)¶
Halmaz jellemzői¶
Pythonban a halmazok és a listák nagyon hasonlóak. A fő különbségek a következők:
- Inicializáláskor
{ }
tagok közé írjuk az értékeket - Minden eleme csak és kizárólag egyszer szerepelhet
- Nincs az elemnek sorszáma, nem tudunk külön hivatkozni (
sajatlista[1]
)
Ha nem rendezhetőek az elemek akkor miért vannak sorba a kisebb számok?
A Python set
elemei nem rendezettek, de amikor egy halmazt kiírsz vagy listává alakítasz, az elemek gyakran rendezettnek tűnnek, mert a Python belső megvalósítása szerint bizonyos esetekben a kis elemszámú halmazoknál az elemeket növekvő sorrendben tárolja és jeleníti meg.
Ez azonban nem egy garantált viselkedés, csak egy mellékhatása annak, hogyan működnek a set
-ek.
A set
-ek alapvetően azért nem rendeltek, mert a háttérben egy hash-alapú adatstruktúrát használnak, ami gyors hozzáférést biztosít, de nem követi az elemek sorrendjét.
Halmaz bejárása¶
Új elem hozzáadása halmazhoz¶
A listával ellenetétben a halmazokban egy elem csak egyszer szerepelhet.
Megjegyzés
Amennyiben egy olyan elemet adunk a halmazhoz, amit már tartalmaz, azt a rendszer automatikusan nem adja hozzá. Ez a művelet hibát nem eredményez.
Elem törlése halmazból¶
Halmaz egyesítése¶
Mind matematikában, mind Pythonban lehetőségünk van két halmaz elemeinek egyesítésére. Amennyiben mindkét halmaz tartalmaz egy adott elemet akkor az csak egyszer fog szerepelni.
Megjegyzés
Vegyük észre a fennti példában, hogy a 3
csak egyszer szerepel a végeredményben, azonban mindkét halmazban egyaránt szerepel.
Halmaz gyakorló feladatok¶
Közös elemek keresése
Kérj be két szóközzel elválasztott szósorozatot, majd írd ki az összes elemet, amely bármelyik sorozatban szerepe!
Példa
Mit kell tenned?
- Olvasd be az első és a második szósorozatot
- Alakítsd mindkét szósorozatot halmazzá
- Találd meg az uniót a két halmaz között
- Jelenítsd meg az uniót
Megoldás
elso_sorozat = input("Adjon meg egy szóközzel elválasztott első szósorozatot: ")
masodik_sorozat = input("Adjon meg egy szóközzel elválasztott második szósorozatot: ")
elso_halmaz = set(elso_sorozat.split(" "))
masodik_halmaz = set(masodik_sorozat.split(" "))
unio = elso_halmaz.union(masodik_halmaz)
print(f"Az unió: {unio}")
Szótár (Dictionary)¶
Szótár jellemzői¶
- A szótárak nagyon eltérőek a listától és a halmaztól
- Ebben az esetben kulcs-érték párokat tárolunk
- Egy kulcshoz egy érték tartozhat
Szótár inicializálása¶
- A szótár mindig egy "kulcs" : "ertek" formátumot követ
- Az elemeket egymás alá írjuk vesszővel elválasztva
- A szótár tartalmazhat intet, stringet, boolet, floatot vegyesen
Több kulcs-érték párt is tárolhatunk egy szótárban, ekkor a kulcsokat vesszővel választjuk el egymástól.
Szótár példa¶
Vegyük a Vasas FC játékosait. Minden mezszámhoz egyetlen játékos tartozik
Megjegyzés
A fenti példák alapján tehát, a bal oldalon találhatóak a kulcsok, a jobb oldalon pedig a hozzájuk tartozó értékek. Így alakulnak ki a kulcs-érték párok.
Szótár adott elemének elérése¶
Szótárak esetében adott elemre hasonlóan tudunk hivatkozni mint a listáknál, annyi kivétellel, hogy nem az elem számát, hanem a kulcsát adjuk meg.
Példa
Másik módszer az érték lekérésre
A fenti példában a get()
metódust használtuk az érték lekérésére, azonban alkalmazhatjuk a listáknál tanult módszert is.
Ezzel a probléma az, hogy ha a kulcs nem létezik a szótárban, akkor hibát fogunk kapni, ezért ennek használata nem javasolt.
Több adat tárolása egy kulcshoz¶
Egy kulcshoz több értéket is tárolhatunk, ekkor a kulcs értéke egy lista lesz.
Kérjük le az 55-ös mezszámú játékos nevét!
Szótár gyakorló feladatok¶
Ország-főváros párosítás
Készíts egy szótárat, ahol a kulcsok országok nevei, az értékek pedig a hozzájuk tartozó fővárosok! Adj meg néhány országot és fővárosát, majd kérj be egy országot a felhasználótól, és írd ki annak fővárosát! Ha az ország nincs a szótárban, jeleníts meg egy üzenetet, hogy az ország nem található.
Mit kell tenned?
- Készíts egy szótárat néhány ország-főváros párral
- Kérj be egy országot a felhasználótól
- Írd ki az ország fővárosát, ha megtalálható a szótárban
- Ha az ország nem található, jeleníts meg egy üzenetet
Megoldás
orszagok = {
"Magyarország": "Budapest",
"Franciaország": "Párizs",
"Németország": "Berlin",
"Olaszország": "Róma"
}
orszag = input("Melyik ország fővárosát szeretné megtudni? ")
if orszag in orszagok:
print(f"{orszag} fővárosa: {orszagok[orszag]}")
else:
print("Az ország nem található a szótárban.")
Diák jegyei
Kérj be egy diák nevét és jegyét (pl. „Anna 5”) a felhasználótól, majd bontsd fel a nevet és jegyet egy szótárba! Írd ki a diák nevét és jegyét a konzolra!
Mit kell tenned?
- Kérj be egy nevet és egy jegyet a felhasználótól egy sorban
- Használd a
split
függvényt a név és a jegy szétválasztásához - Hozz létre egy szótárat, ahol a név a kulcs, és a jegy az érték
- Írd ki a diák nevét és jegyét
Műveletek összehasonlítása¶
Jelölje adatok
a változót, amely a lista, halmaz vagy szótár típusú adatot tartalmazza.
A \(p_1, p_2, p_3\) paraméterek a műveletekhez szükséges paramétereket jelentik.
Ebben az esetben az alábbi műveletek érhetők el:
Lista | Halmaz | Szótár | |
---|---|---|---|
Hozzáadás | .append(p1) |
adatok.add(p1) |
adatok[kulcs] = ertek |
Egyesítés | .extend(p1) |
adatok.union(p1) |
adatok.update(p1) |
Törlés | .remove(p1) |
adatok.remove(p1) |
adatok.pop(p1) |
Bejárás | for elem in adatok |
for elem in adatok |
for elem in adatok |
Kiürítés | .clear() |
adatok.clear() |
adatok.clear() |
Másolás | .copy |
adatok.copy() |
adatok.copy() |
Inicializálás | list() |
set() |
dict() |