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 ugyanazt az értéket kétszer adjuk a sethez, csak egyszer fog szerepelni

s.add(„alma”)
print(s)
{‘banán’, ‘cseresznye’, ‘körte’, ‘alma’}