PYTHON PROGRAMOZÁS
10. - 2D listák
Az egyszerű listák egydimenziós adatszerkezetek, csak hosszuk van.
Ha a listákban újabb lista van, akkor az adatszerkezet kétdimenziós: van "szélessége" és "magassága". (gyakorlatilag egy táblázat)
A kis listák a nagy lista
elemei, egy lista elemeit vesszővel soroljuk fel.
Típusalgoritmusok a kétdimenziós adatszerkezetekben
LISTÁKAT TARTALMAZÓ LISTÁK BEJÁRÁSA (TK. 81. old.)
A következő lista egy vonósnégyes tagjainak jelenléti íve. Az ív egy hét munkanapjain mutatja a jelenlétet, ahol 1 szerepel benne, ott jelen volt a zenész, ahol 0, ott nem.
Egy-egy "kis lista" egy zenész jelenlétét mutatja be, a "nagy" lista pedig az egész zenekarét.
ív = [[1, 1, 1, 1, 1], #egyik hegedűs
[1, 1, 1, 1, 0],
[1, 1, 0, 0, 0],
[0, 1, 1, 1, 1]]
for vonós in ív: #egymásba ágyazott ciklus
for nap in vonós:
if nap == 1:
print('itt', ' ', sep='', end='')
else:
print('otthon', ' ', sep='', end='')
print() #minden zenész új sorban
02 Jelenlétek száma1 - ÖSSZEGZÉS (TK. 82. old. 1. feladat)
(Mennyi egyes van a "táblázatban"? )
ív = [[1, 1, 1, 1, 1],
[1, 1, 1, 1, 0],
[1, 1, 0, 0, 0],
[0, 1, 1, 1, 1]]
adagok = 0
for vonós in ív:
for nap in vonós:
if nap == 1:
adagok += 1 #vagy adagok = adagok + 1
print('Összesen', adagok, 'adagot kell fizetni pénteken.')
03 Jelenlétek száma2 - ÖSSZEGZÉS (TK. 82. old. 1. feladat)
(Megoldás SUM függvénnyel )
[1, 1, 1, 1, 0],
[1, 1, 0, 0, 0],
[0, 1, 1, 1, 1]]
adagok = 0
for vonós in ív:
adagok += sum(vonós)
print('Összesen', adagok, 'adagot kell fizetni pénteken.')
04 Jelenlétek száma3 - MEGSZÁMOLÁS (TK. 82. old. 1. feladat)
(Megoldás COUNT függvénnyel, ha szöveggel jelzik a jelenlétet és nem 1-essel )
Pl.: e betűk megszámolása -> 'rendetteremtettem'.count('e') = 6
[1, 1, 1, 1, 0],
[1, 1, 0, 0, 0],
[0, 1, 1, 1, 1]]
adagok = 0
for vonós in ív:
adagok += vonós.count(1)
print('Összesen', adagok, 'adagot kell fizetni pénteken.')
05a Legtöbbet jelen lévő (TK. 82-83. old. 2. feladat)
(Melyik zenész volt a legtöbbet jelen a héten? Melyik a legkevesebbet? )
[1, 1, 1, 1, 0],
[1, 1, 0, 0, 0],
[0, 1, 1, 1, 1]]
sorszám = None
legnagyobb = 0
for index in range(len(ív)):
vonós_jelenléte = sum(ív[index])
if vonós_jelenléte > legnagyobb:
legnagyobb = vonós_jelenléte
sorszám = index
print('A(z) ', sorszám+1, '. vonós volt a legtöbbet jelen.', sep='')
05b Legtöbbet jelen lévő (TK. 82-83. old. 2. feladat)
Egy ciklussal előállítja azt a listát, amiben keresgélni kell, majd megkeressük
a legnagyobb értéket (MAXIMUMKIVÁLASZTÁS) és megtudjuk az érték pozícióját (KIVÁLASZTÁS).
[1, 1, 1, 1, 0],
[1, 1, 0, 0, 0],
[0, 1, 1, 1, 1]]
vonósok_jelenlétei = []
for vonós in ív: #Ez a ciklus tölti fel az új listát az
append() függvényt használva.
vonós_jelenléte = sum(vonós)
vonósok_jelenlétei.append(vonós_jelenléte)
sorszám = vonósok_jelenlétei.index(max(vonósok_jelenlétei))
#INDEX-keresés, MAX-maximumkiválasztás
print('A(z) ', sorszám+1, '. vonós volt a legtöbbet jelen.', sep='')
07 Amikor mindenki itt volt (TK. 83. old. 4. feladat)
Nem egy vonóst, hanem egy napot vizsgálunk.
(Nem egy sor értékeit összegezzük, hanem egy oszlopét.)
[1, 1, 1, 1, 0],
[1, 1, 0, 0, 0],
[0, 1, 1, 1, 1]]
for nap_indexe in range(5):
e_napon_ennyien_voltak = 0
for vonós in ív:
e_napon_ennyien_voltak += vonós[nap_indexe] #ÖSSZEGZÉS: 0 vagy 1 hozzáadása (minden nap)
if e_napon_ennyien_voltak == 4: #ELDÖNTÉS
print('A(z) ', nap_indexe+1,'. napon mindenki jelen volt.', sep='')
Objektumok adatai kétdimenziós listákban
Egy-egy lista egy-egy objektumról (diákról) szól, a lista elemei az objektumainkról tárolt tulajdonságok (név, nem, kor, e-mail-cím)
08 Névsor és e-mail kiíratása (TK. 84. old. 5. feladat)
osztály = [["Noémi", "l", 15, "noemi@hipp.hopp"],
["Dezső", "f", 17, "dezso2@nyikk.nyekk"],
["Gizella", "l", 16, "gizi@pikk.pakk"],
["Edömér", "f", 16, "edo@itt.ott"]]
for tag in osztály:
print(tag[0], ": ", tag[-1], sep='')
09 Osztály átlagéletkora (TK. 84. old. 6. feladat)
["Dezső", "f", 17, "dezso2@nyikk.nyekk"],
["Gizella", "l", 16, "gizi@pikk.pakk"],
["Edömér", "f", 16, "edo@itt.ott"]]
összeg = 0
for tag in osztály:
összeg += tag[2]
print('Az osztály átlagéletkora', összeg/len(osztály), 'év.')
10 Fiúk és lányok (TK. 84. old. 7. feladat)
(A lányok vannak többen vagy a fiúk?)
["Dezső", "f", 17, "dezso2@nyikk.nyekk"],
["Gizella", "l", 16, "gizi@pikk.pakk"],
["Edömér", "f", 16, "edo@itt.ott"]]
lányok = 0
for tag in osztály:
if tag[1] == 'l':
lányok += 1
if lányok > len(osztály) - lányok:
print('A lányok vannak többen.')
elif lányok < len(osztály) - lányok:
print('A fiúk vannak többen.')
else:
print('A fiúk pont annyian vannak, mint a lányok.')