Ugrás a lényegre

Adatstruktúrák

TL;DR Tartalom
Extra feladatok

Ezek nem kötelező feladatok, csak megoldásuk közben könyebb megtanulni a dolgokat

  • Készíts egy Tuple-t, majd írd ki az elemeit úgy, hogy egyszerre indulsz az elejétől és a végétől.
    Pl.: ("A", "B", "C") esetén:
    A C
    B B
    C A
    (Spoiler: zip)
  • Készíts egy programot, mely megszámolja egy szövegben, hogy az egyes betűkből mennyi van.
    (Spoiler: Sets)

List

Listának az említetteken kívül van egy pár beépített függvénye.

>>> gyumolcs = ['narancs', 'alma', 'körte', 'banán', 'kiwi', 'alma', 'banán']
>>> gyumolcs.count('alma')
2
>>> gyumolcs.count('mandarin')
0
>>> gyumolcs.index('banán')
3
>>> gyumolcs.index('banán', 4) # Következő banán a 4. index után
6
>>> gyumolcs.reverse() # Elemek megfordítása helyben
>>> gyumolcs
['banán', 'alma', 'kiwi', 'banán', 'körte', 'alma', 'narancs']
>>> gyumolcs.append('szőlő') # Új elem a végére
>>> gyumolcs
['banán', 'alma', 'kiwi', 'banán', 'körte', 'alma', 'narancs', 'szőlő']
>>> gyumolcs.sort()
>>> gyumolcs
['alma', 'alma', 'banán', 'banán', 'szőlő', 'kiwi', 'narancs', 'körte']
>>> gyumolcs.pop() # Töröl egyet a végéről és azzal visszatér
'körte'

Például stack-ként egy listát elég egyszerűen lehet használni ha csak az append és a pop függvényt használjuk.

pop mellet tudunk akár a del -el is egy adott elemet törölni.

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a[0]
>>> a
[1, 66.25, 333, 333, 1234.5]
>>> del a[2:4]
>>> a
[1, 66.25, 1234.5]
>>> del a[:]
>>> a
[]

Tuple

Lista mellett Tuple-t is tudunk készíteni.

Ezek definiálásához csak értékeket kell felsorolnunk vesszővel elválasztva. (Akár zárójelbe is tehetjük őket)

>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
>>> # Több tuple-t össze illeszthetünk:
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
>>> # Nem tudjuk változtani az értékeit:
... t[0] = 88888
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> # Viszont lehet bennük változtatható objektum:
... v = ([1, 2, 3], [3, 2, 1])
>>> v
([1, 2, 3], [3, 2, 1])
>>> v[0][0] = 4
>>> v
([4, 2, 3], [3, 2, 1])

Egy függvényben * -al tudjuk jelölni, hogy az extra mezőket mely változóba szeretnénk tenni.

>>> def fv(*a):
... print(a)
...
>>> fv(2,3,4,5)
(2, 3, 4, 5)

Ilyenkor az átadott értékeket becsomagolja az a változóba, mint Tuple.

>>> fv((1,2,3))
((1, 2, 3),)

Sets

A set egy duplikátumok nélküli lista.
Köztük a különböző halmaz műveleteket is ellehet végezni.

>>> kosar = {'alma', 'narancs', 'alma', 'korte', 'narancs', 'banan'}
>>> print(kosar) # Duplikátumok törölve lettek
{'korte', 'banan', 'alma', 'narancs'}
>>> 'narancs' in kosar # Tudjuk a tagokat gyorsan ellenőrizni
True
>>> 'szilva' in kosar
False

>>> # Alapértelmezett konstruktor a kapott sztringet
... # betűnként set-be konvertálja
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> # Halmaz műveletek
...
>>> a # Egyedi karakterek a-ban
{'b', 'c', 'a', 'd', 'r'}
>>> a - b # Betűk a-ban, de b-ben nem
{'d', 'b', 'r'}
>>> a | b # Betű a-ban vagy b-ben
{'b', 'c', 'm', 'z', 'a', 'l', 'd', 'r'}
>>> a & b # Betűk a-ban és b-ben is
{'a', 'c'}
>>> a ^ b # Betűk a-ban vagy b-ben,
{'b', 'm', 'l', 'z', 'd', 'r'} # metszetet kivéve

Dictionary

Kulcs - Érték párosokat tudunk ebben az adatstruktúrában tárolni.

>>> telefon = {'bella': 4098, 'kata': 4139}
>>> telefon['attila'] = 4127 # Így tudunk kulcs szerint indexelni
>>> telefon
{'bella': 4098, 'kata': 4139, 'attila': 4127}
>>> telefon['bella']
4098
>>> del telefon['kata']
>>> telefon['vivi'] = 4127
>>> telefon
{'bella': 4098, 'attila': 4127, 'vivi': 4127}
>>> list(telefon)
['bella', 'attila', 'vivi']
>>> sorted(telefon)
['attila', 'vivi', 'bella']
>>> 'attila' in telefon
True
>>> 'bella' not in telefon
False

Hasonlóan a Tuple-höz, a függvényekben a **-al tudjuk jelölni azon változót, melyben szeretnénk a kulcs érték párosokat összegyüjteni.

>>> def fv(**dic):
... print(dic)
...
>>> fv(a=1, b=2, c=3)
{'a': 1, 'b': 2, 'c': 3}

Iterálás

A felsorolt objektumok mind iterálható objektumok, tehát for ciklussal hasonlóan a listához végig tudunk menni rajtuk.

Dictionary

Egy Dictionary-n kulcs és érték párossal tudunk végig iterálni.

>>> kosar = {'alma': 23, 'korte': 41}
>>> for kulcs, ertek in kosar.items():
... print(kulcs, str(ertek) + " db.")
...
alma 23 db.
korte 41 db.

enumerate

Ha indexel szeretnénk végig iterálni, akkor az enumerate függvénnyel ezt megtudjuk oldani.

>>> for i, v in enumerate(['tic', 'tac', 'toe']):
... print(i, v)
...
0 tic
1 tac
2 toe

zip

Egyszerre akár több szekvencián is végig tudunk menni a zip segítségével.

>>> kerdesek = ['neved', 'küldetésed', 'kedvenc szined']
>>> valaszok = ['Szofia', 'Átmenni analízisból', 'Kék']
>>> for k, v in zip(kerdesek, valaszok):
... print('Mi a {0}? {1}.'.format(k, v))
...
Mi a neved? Szofia.
Mi a küldetésed? Átmenni analízisból.
Mi a kedvenc színed? Kék.

Itt használtam a .format függvényt. Ezzel egy szövegben {szám}-al megjelölt helyekre tudjuk beilleszteni a paraméterben megadott változókat.

reversed

Akár meg is tudjuk fordítani a listánkat.

>>> for i in reversed(range(1, 10, 2)):
... print(i)
...
9
7
5
3
1