Keresés

Hirdetés

!!! SZERVERLEÁLLÁS, ADATVESZTÉS INFORMÁCIÓK !!!
Talpon vagyunk, köszönjük a sok biztatást! Ha segíteni szeretnél, boldogan ajánljuk Előfizetéseinket!

Új hozzászólás Aktív témák

  • cousin333

    addikt

    válasz tvamos #3752 üzenetére

    Ez a gyakran előforduló alap szituáció, ami egy lista (tágabban: egy iterálható objektum) elemein hajtja végre ugyanazt a függvényt:

    lista = []
    for elem in elemek:
      lista.append(func(elem))

    A func() függvényhívásnak ott kell lennie különben egyszerűen csak átmásolnád a listát. Ugyanez rövidebben ún. list comprehension-nel:

    lista = [func(elem) for elem in elemek]

    Gyakorlatilag a for ciklus belsejét kihoztuk az elejére, elhagytuk az append-et, és az egészből egy egysoros értékadást csináltunk. Az extra [] tulajdonképpen egy "konstruktor", egy "syntactic sugar" (van erre magyar kifejezés?), ami azt mondja, hogy az eredményt listába szeretném rendezni. Írhattam volna ezt is:

    lista = list(func(elem) for elem in elemek)

    A [] helyett írhatnék mást is, a szándéktól függően: a {} például - kicsit más szintaxis mellett - egy szótárat (dictionary) hozna létre, míg a () egy generátor kifejezést. Ami egyébként megegyezik a fenti példával, csak a list függvény nélkül. Mint látható, Pythonban az egyes szintaktikai elemek ebben az esetben (is) nagyon szépen egymásra épülnek.

    Namost az if kifejezés a fentieknek egy speciális esete: nem akarunk minden elemet felhasználni, csak azokat, amik egy bizonyos feltételnek megfelelnek. Mivel ez egy extra, opcionális eset, logikus, hogy a kifejezés végére kerül, ha egyáltalán szerepel:

    lista = [func(elem) for elem in elemek if not elem % 3]

    Ugyanígy működik a feltételes értékadás is, amit axioma is írt, ami mondjuk C-ben az x = (a) ? m : n.

    Pythonban pedig:
    x = m if a else n

    Ha nem lenne feltétel, akkor csak simán ezt írnánk:
    x = m

    Látható, hogy a feltételes és feltétel nélküli értékadás ugyanúgy kezdődik, csak előbbi a feltétellel folytatódik.

  • JoinR

    őstag

    válasz tvamos #3752 üzenetére

    Nyugodtan használd, annyira nem bonyolult és gyakran használt megoldás. Itt jól ki van vesézve.

Új hozzászólás Aktív témák