Fizika, matek, informatika érettségi

Home Fizika Excel Access A weboldalról

Listák, halmazok

Lista

Lista (list): egymás utáni adatok. Vannak 1 (pl. [10,20,30]) és több dimenziós (pl. [[a,1],[b,2]]) tömbök, az indexek 0-tól indulnak. A Python a stringeket is listaként kezeli. A Pythonban a listára nem vonatkozik az a szigorú megkötés, hogy minden elem azonos típusú lehet, és több dimenzió esetén is lehetnek eltérő számú elemek.

Létrehozás:
lista = [1,’a’,[2,3]], de lehet for ciklussal is létrehozni:
paros_szamok = [i for i in range(1, 101) if i % 2 == 0]
lista = [’+’ if a>=0 else ’-’ for a in szamok]

Üres lista létrehozása: lista = []

Lista másolása: ujlista = copy(lista)

Elem hozzáadása:
lista.append(elem) egy elemet hozzáfűz a lista végéhez.
lista.extend(elem) kibővíti a listát. Pl. a lista.append([1,2,3]) a listához új elemként az [1,2,3] tömböt adja hozzá, a lista.extend([1,2,3]) pedig hozzáadja az 1, 2 és 3 számokat új listaelemként.

Elem törlése: lista.remove(elem)

Lista métere (elemek száma): len(lista)

Lista megfordítása: lista[::-1]


Elemek elérése:listaelemekre hivatkozhatunk ilyen formákban:
lista[i] lista i-1-edik eleme, kezdőérték 0. Negatív i esetén visszafelé számol, vagyis lista[-1] az utolsó elemet jelenti.
lista[i:j] a lista része, szelete i. indextől j-1. indexig, de a j-edik elemet már nem tartalmazza; i alapbeállítás szerinti értéke 0, j alapbeállítás szerinti értéke len(lista
lista[i:j:k] a lista i-től j-ig vett szelete, k lépésközzel.

Például a lista = [’a’, ’b’, ’papa’, ’z’, ’mama’] esetén a következők az értékek:
lista[1:3] eredménye [’b’, ’papa’]
lista[1:-1] eredménye [’b’, ’papa’, ’z’]
lista[0:3] eredménye [’a’, ’b’, ’papa’]
lista[:3] eredménye [’a’, ’b’, ’papa’]
lista[3:] eredménye [’z’, ’mama’], a harmadik indexűtől a végéig.
lista[:] eredménye [’a’, ’b’, papa’, ’z’, ’mama’]

Egy listán végig lehet lépkedni

Stringlista kiíratása: ’elválasztó’.join(lista). Az a jó benne, hogy korrektül dolgozik, és az utolsó elem után nem írja ki az alválasztót. De csak stringlkistát tud kezelni, számokból álló listákra ez nem jó!

Ha számlistát akarunk kiíratni, egyik lehetőség pl. print(’, ’.join([str(n) for n in számlista])): a számokból álló listát stringlistává alakítjuk, és ezt már tudja a join() kezelni.
Ugyanezt a map() függvénnyel is megcsinálhatjuk, ami egy függvényt alkalmaz a lista összes elemére: print(’, ’.join(map(str,számlista))).

Van lehetőség a * használata: print(*lista) szóközzel elválasztva írja ki egymás alá a lista elemeit.
Példák: print(*lista,sep=’,’) vesszővel és szóközzel elválasztva írja ki a lista elemeit, print(*lista,sep=’\n’) egymás alá, új sorokba.


Fontosabb listakezelő függvények:
lista.count(elem) megszámolja, hányszor fordul elő az adott elem a listában.
lista.index(érték) az első, értékkel egyenlő elem indexe.
lista.sort(reverse=True|False, key=függvény) rendezi a listát.
lista.clear() minden elemet kitöröl a listából.
lista.remove(elem)
lista.insert(index,elem) index pozícióra beszúrja elemet
lista.pop(index) az index pozícióról kitöröl egy elemet.
lista.reverse() megfordítja a listát.
min(lista) a lista legkisebb eleme.
max(lista) a lista legnagyobb eleme.
sum(lista) összeadja a számlista elemeit.


Lista rendezése: sort(key=függvény, reverse=True)
Példák: számlista növekvőbe rendezése: lista.sort()
számlista csökkenőbe rendezése: lista.sort(reverse=True)
szöveglista hossz szerinti rendezése: lista.sort(key = len)


Végiglépkedés: vagy elemek szerint, vagy index szerint:
for elem in lista:
print(elem)
for i1 in range(len(lista)):
print(lista[i1])


Tartalmazás vizsgálat: Az in operátorral lehet eldönteni, hogy egy elem benne van-e egy listában, pl.
if betu in [’e’,’i’,’o’,’ö’,’ü’,’ó’,’ő’,’ú’,’é’,’á’,’í’]:
print(’a betű egy magánhangzó’)
else:
print(’a betű egy mássalhangzó’)


Több dimenziós listák, tömbök: listák listája.
Példa több dimenziós tömbre: szamok = [[1,3],[5,7],[9,11]]. Itt pl. szamok[2][0] értéke 9.
Például lista = [[’egy’,1],[’hét’,7,’törpe’]] Itt lista[1][1] értéke 7, lista[0][1] értéke 1.


Elemek elérése: több dimenziós listán végig lehet így menni:
for i in range(len(a)):
for j in range(len(a[i])):
print(a[i][j], end=’ ’)
print()


Több dimenziós lista rendezése: több lehetőség van.
sort(key=lambda elem: elem[1]) pl. a 2. elemek szerint rendezi növekvőbe.
sort(key=lambda elem: elem[0], reverse=True) az első elemek szerinti csökkenőbe rendezi. De működik a sort(key=lambda elem: -elem[0]) is.
sort(key=lambda e:(e[0],e[1]) a listát úgy rendezi, hogy az 1., azon belül a 2. elemek szerint növekvőbe.
sort(key=lambda e:(e[0],-e[1]) a listát úgy rendezi, hogy az 1. elemek szerint növekvőbe, azon belül a 2. elemek szerint csökkenőbe.

Definiálhatunk egy rendező függvényt, pl. a következő minta rendezi a listát úgy, hogy az 1., majd a 2. szerint lesznek sorba rendezve.
def rendez(i):
return i[0],i[1] lista.sort(key=rendez)

Csökkenőbe így lehet rendezni: lista.sort(key=rendez,reverse=True)


Halmaz

Halmaz (set): egy elem csak egyszer fordulhat elő benne, nem rendezett (nem lehet megmondani, melyik az első vagy utolsó elem és nem lehet indexszel hivatkozni egy-egy elemre), és az elemek nem változtathatók meg. Lehet viszont hozzárakni elemet, kiszedni belőle, tartalmazást vizsgálni, végiglépkedni az elemeken és a metszet és unió is megvalósítható a megfelelő függvényekkel.

Amiért nagyon hasznos: ha egy listából halmazt csinálunk, akkor a lista minden elem csak egyszer szerepel benne, vagyis eltávolítja a duplikációkat. Így azt lehet vizsgálni, hogy mely elemek fordulnak elő a listában.

Pl. ha a lista = [1, 1, 2, 2, 3, 4, 5, 5, 5, 6, 9], akkor a halmaz=set(lista) eredménye {1, 2, 3, 4, 5, 6, 9}. Ilyenkor a 2 in halmaz eredménye is True lesz.

A következő példa megmutatja, hogy az egyes listaelemekből hány darab van a listában:
lista = [1, 1, 2, 2, 3, 4, 5, 5, 5, 6, 9]
halmaz=set(lista)
for h in halmaz:
print(f’elem: {h}, előfordulások száma: {lista.count(h)}’)

Új elem hozzáadása: lista.add(új elem)

Egy elem törlése: lista.remove(törlendő_elem)

Elemek elérése:
for elem in halmaz:
print(elem)


Tartalmazás vizsgálat:
if 1 in (1, 2, 3):
print(’Benne van!’)