A korábbi cikkekben már volt szó változókról, stringekről
A Python lehetőséget ad olyan változók használatára, amit talán összetett változóknak nevezhetünk.
Lista (list)
Egy listában többféle értéket sorolhatunk fel. Minden egyes érték lehet bármely eddig felsorolt, vagy a későbbiekben ismertetett típus, ide értve a listát is (igen, egy lista tartalmazhat listákat)
Kezdjük egy egyszerű esettel:
lis=['Alma','körte','cseresznye'] print(lis) ['Alma', 'körte', 'cseresznye']
A lista egyes elemit egyenként is elérhetjük:
print(lis[1])
körte
A lista elemeit a stringekhez hasonlóan nullától számoljuk. A lista részeit is a stringekhez hasonlóan érhetjük el:
print(lis[0:2])
['Alma', 'körte']
print(lis[-1])
cseresznye
A listák értékadása érdekes az eddigiekhez képest:
l2=lis
l2.append('banán')
print(lis).
Természetesen van lehetőség arra, hogy a lista másolatát hozzuk létre az l2 változóban:
l2=lis.copy()
l2.append('meggy')
print(l2)
['Alma', 'körte', 'cseresznye', 'banán', 'meggy']
print(lis)
['Alma', 'körte', 'cseresznye', 'banán']
A listák összefűzése összeadásjellel történik
lis3=lis+l2 print(lis3) ['Alma', 'körte', 'cseresznye', 'banán', 'meggy', 'Alma', 'körte', 'cseresznye', 'banán', 'meggy']
Egy adott elem első előfordulásának megkeresése:
print(lis3.index('banán'))
3
Ha olyan értéket keresünk, ami nem szerepel listában, akkor hibaüzenetet kapunk
Lehetőség van nem csak a lista végére, hanem tetszőleges pozícióba beszúrni elemet:
lis3.insert(2,'kiwi')
print(lis3)
['Alma', 'körte', 'kiwi', 'cseresznye', 'banán', 'meggy', 'Alma', 'körte', 'cseresznye', 'banán', 'meggy']
A listákat rendezni is lehet emelkedő és csökkenő sorrendbe
lis3.sort
print(lis3)
['Alma', 'Alma', 'banán', 'banán', 'cseresznye', 'cseresznye', 'kiwi', 'körte', 'körte', 'meggy', 'meggy']
Láthatóan a string típusú értékeket ábc sorrendbe rendezi, a szám jellegű értékeket pedig nagyság szerinti sorrendbe.
Természetesen ez a megoldás csak akkor működik, ha a tárolt értékek összehasonlíthatóak. A következő utasítás hibaüzenetet eredményez, mert egy sztringet nem lehet integerrel összehasonlítani:
lis3.append(2)
lis3.sort()
A cikk folytatásához távolítsuk el a 2 értéket:
lis3.remove(2)
A szám (integer) típusú elem eltávolítása után a rendezés ismét elvégezhető
lis3.sort()
print(lis3)
['Alma', 'Alma', 'banán', 'banán', 'cseresznye', 'cseresznye', 'kiwi', 'körte', 'körte', 'meggy', 'meggy']
Természetesen a rendezést meg lehet csinálni fordított sorrendben is
lis3.sort(reverse=True) print(lis3) ['meggy', 'meggy', 'körte', 'körte', 'kiwi', 'cseresznye', 'cseresznye', 'banán', 'banán', 'Alma', 'Alma']
Szótár (Dictionary)
A definíció szerint a dictionary kulcs:érték (key:value) párok rendezetlen halmaza. Használata akkor javasolt, ha az értékeket a kulcsok szerint szeretnénk elérni. Ilyenkor az értékek elérése viszonylag gyors.
A kulcs bármilyen unmutable (nem megváltoztatható) típusú érték lehet. Minden kulcs csak egyszer szerepelhet, ha ismét értéket próbálunk neki adni, akkor az eredeti értéket felülírja.
dic={'gyümölcs':['Banán','Alma'],'bútor':['Szék','szekrény']}
print(dic)
{'gyümölcs': ['Banán', 'Alma'], 'bútor': ['Szék', 'szekrény']}
dic['gyümölcs']=['alma','körte']
print(dic)
{'gyümölcs': ['alma', 'körte'], 'bútor': ['Szék', 'szekrény']}
A fenti példában a kulcsokhoz listába rendezett értékeket társítottam. A gyümölcs kulcshoz tartozó értékeket módosítottam.
Természetesen egyszerű típusok is lehetnek a dictionary értékei:
Például néhány gyümölcs árát is letárolhatjuk:
arak={} #létrehozunk egy üres dictionaryt arak['alma']=450 arak['körte']=510 arak['cseresznye']=600 print(arak) {'alma': 450, 'körte': 510, 'cseresznye': 600} print(arak[körte]) 510
Természetesen a dictionary value (érték) részében lehet list vagy dictionary is
dic={} # Létrehoztam egy üres dictionaryt-t
dic['Skoda']={'motor':'1400 ccm','kerék':'195 65 R14','tipus':'fabia'}
dic['ferrari']={'motor':'6200 ccm','kerék':'255/35R19','tipis':'maranello'}
print(dic)
{'Skoda': {'motor': '1400 ccm', 'kerék': '195 65 R14', 'tipus': 'fabia'}, 'ferrari': {'motor': '6200 ccm', 'kerék': '255/35R19', 'tipis': 'maranello'}}
Lehetőség van egy listába kigyűjteni egy listába a dictionary összes kulcsát (key)
print(dic.keys())
dict_keys(['Skoda', 'ferrari'])
Ha az értékekre (value) van szükség:
print(dic.values())
dict_values([{'motor': '1400 ccm', 'kerék': '195 65 R14', 'tipus': 'fabia'}, {'motor': '6200 ccm', 'kerék': '255/35R19', 'tipis': 'maranello'}])
Ezekre majd visszatérünk a ciklus utasításoknál.
Lehetőség van megállapítani, hogy hány elem (key-value pár) van egy dictionaryban
print(len(dic))
2
A dictionary-k másolása ugyan úgy történik, mint listák esetén
dic2=dic
dic['trabant']={'motor':'600 ccm', 'kerék':'145/80R13','tipus':'601'}
print(dic2)
{'Skoda': {'motor': '1400 ccm', 'kerék': '195 65 R14', 'tipus': 'fabia'}, 'ferrari': {'motor': '6200 ccm', 'kerék': '255/35R19', 'tipis': 'maranello'}, 'trabant': {'motor': '600 ccm', 'kerék': '145/80R13', 'tipus': '601'}}
Ez a fajta értékadás azt teszi lehetővé, hogy ugyan arra a dictionary-ra két (vagy több) névvel lehessen hivatkozni (ez hasonló, mint a list-esetén).
Ha a dictionary másolatára van szükség akkor a copy a megoldás:
dic2=dic.copy() dic['trabant2']={'motor':'610 ccm', 'kerék':'145/80R23','tipus':'621'} print(dic2) {'Skoda': {'motor': '1400 ccm', 'kerék': '195 65 R14', 'tipus': 'fabia'}, 'ferrari': {'motor': '6200 ccm', 'kerék': '255/35R19', 'tipis': 'maranello'}, 'trabant': {'motor': '600 ccm', 'kerék': '145/80R13', 'tipus': '601'}}
Tuple (kupac)
A tuple hasonlít a list-re, azonban nem megváltoztatható (immutable) és ordered (sorszám szerint elérhetőek az elemek).
tu=("alma","körte","szilva")
Ha egy tuple-nek csak egy leme van, akkor az elem után ki kell tenni a vesszőt
tu=("alma",)
Térjünk vissza az eredeti tuple-hez
tu=("alma","körte","szilva")
A tuple „ordered”, tehát az egyes elemekre sorszám szerint lehet hivatkozni.
print(tu[1])
körte
A set unordered, itareble (az összes ebben a cikkben tárgyalt típushoz hasonlóan), halmaza az értékeknek. Az egyes már létező elemek nem megváltoztathatóak, azonban az elemek törölhetőek és új elemeket lehet a set-hez adni. Nem tárol ismétlődő elemeket. Fő előnye, hogy gyorsan kereshetőek benne az elemek.
s=set([„alma”,”körte”,”cseresznye”])
print(s)
{‘cseresznye’, ‘körte’, ‘alma’}
A sethez további elemeket adhatunk:
s.add(„banán”)
print(s)
{‘banán’, ‘cseresznye’, ‘körte’, ‘alma’}
Ha ugyan azt az értéket kétszer adjuk a sethez, csak egyszer fog szerepelni
s.add(„alma”)
print(s)
{‘banán’, ‘cseresznye’, ‘körte’, ‘alma’}