Keresés


Toplista

Toplista
  • betöltés...

Magántanár kereső

Ha szívesen korrepetálnál, hozd létre magántanár profilodat itt.
Ha diák vagy és korrepetálásra van szükséged, akkor regisztrálj be és írd meg itt, hogy milyen tantárgyban!

Python tuple rendezés

279
Írjon egy programot, ami a standard bemenetből kap meg név életkor és magasságot
tartalmazó rendezett hármasokat (tuple) ((név, életkor, magasság)) nulla végjelig. Majd sorba
rendezi őket. Elsőnek név szerint abc rendben, azonos név esetén az idősebbek vannak
hamarabb, ha a koruk is megegyezik, akkor az alacsonyabbak kerülnek előrébb. Végül visszatér
a sorba rendezett hármasokkal úgy, hogy mindegyik új sorban legyen.
Jelenleg 1 felhasználó nézi ezt a kérdést.
python, programozás, tuple, rendezés
0
Felsőoktatás / Informatika

Válaszok

1
A jó hír az, hogy ha egy rakás tuple-t egy listába szerveznél, aztán azt a sorbarendeznéd az x.sort() paranccsal, akkor autómatikusan az elemek sorrendjében rendezne, növekvő sorrendben. A rossz hír az, hogy a tuple második értéke szerint csökkenő sorrendbe kell rendezni.
Az jó hírt viszont ki tudjuk használni a rossz hír orvoslására. A legegyszerűbb megldás, ami eszembe jutott, az ez a parancs:
a.sort(key = lambda x : (x[0], -x[1], x[2]))
Itt `a` egy list, ami a beolvasott tuple-eket tárolja. A key paraméter megadja, hogy mi szerint rendezzen. Ez a parancs azt mondja, hogy csináljon egy tuple-t az első, a második ellentettje és a harmadik elemekből, majd ezt vegye a rendezés alapjául. Az alap rendezési szabályok miatt ekkor a második érték szerint csökkenően fog rendezni (mivel az ellentettje szerint növekvően)
Ha esetleg nem lenne meg, hogy a lambda az mit csinál, akkor a fentebbi parancs az gyakorlatilag megegyezik ezzel:
def sorter(x):
`\qquad`return (x[0], -x[1], x[2])
a.sort(key = sorter)
A key paraméternek gyakorlatilag egy függvényt kell adni, amit lefuttat a lista elemein, és a visszaadott értéket veszi a rendezés alapjául. A lambda-val annyit lehet kikerülni, hogy magánál a paraméternél meg lehet írni a függvényt. Nyilván ez bonyolultabb rendezéseknél nagyon sok helyet foglalna, ezért ott nem célszerű használni.
Ezután a tuple-eket tároló listán csak végigiterálsz és print-eled minden egyes elemét.
Remélem a kérdés lényegi részét sikerült megválaszolnom. Nem garantálom, hogy ez a leggyorsabb vagy leghatékonyabb megoldás, de működik és átlátható, és a pythonnak végülis ez a lényege. Ha valaki más megoldást ír, akkor írjon egy kommentet, hogy én is lássam, mert érdekel.
3