Portál AbcLinuxu, 6. května 2025 12:11
Filtry, množiny, převod na reálná čísla, hashování.
Potřebujete-li získat prvky seznamu, které odpovídají jistým vámi definovaným pravidlům je tato funkce to pravé. Prvním parametrem je funkce, která přejímá jeden parametr - prvek pole a vrací True nebo False. Ta porovnává prvky posloupnosti. Druhým je seznam, n-tice, řetězec nebo jiný objekt, který podporuje procházení pomocí iterátorů. Je-li druhý parametr n-tice nebo řetězec, vrací filter stejný typ. Jinak vrací vždy seznam. Předá-li se jako první parametr None, budou vráceny všechny prvky, které mají hodnotu True.
Jestliže se vám líbí krkolomnější zápisy, můžete také použít příkaz [item for item in list if function(item)]. Vypadá to sice úděsně, ale je v tom jistá logika: "do seznamu ulož item pro každý prvek item v posloupnosti list, pokud funkce function(item) vrací pravdu". Pro parametr None můžete použít velmi podobný příkaz: [item for item in list if item]. A místo posledního item můžete napsat i logický výraz, což při volání funkce filter() nelze (můžete však použít lambda funkci).
Funkce jednoduše převádí parametr x na reálné číslo. Parametr může být celé číslo (případně i dlouhé celé č.), reálné číslo nebo řetězec. Není-li předán žádný parametr, vrací 0.0.
Od verze 2.4 jsou v Pythonu k použití dva nové datové typy. Set - množina a frozenset - konstantní množina. Množiny mohou obsahovat jakýkoliv hashovatelný (neměnný) typ - proměnné, n-tice, třídy a jejich instance. Nemohou však obsahovat seznamy. Každá množina může obsahovat pouze jeden objekt určité adresy. Předáte-li tedy nějaké množině např. číslo 7 třikrát bude tato množina obsahovat jen jednu sedmičku. Množiny jsou neřazené kolekce objektů - nelze tedy získat indexy prvků množiny a přistupovat k nim náhodně. Můžete však procházet množiny pomocí cyklu for použitím iterátorů.
Hlavní rozdíl mezi typy set a frozenset je, že frozenset je neměnná množina, kdežto set můžeme po vytvoření dále upravovat. Protože je frozenset konstantní, můžeme vypočítat hashovou hodnotu objektu funkcí hash(). Objekt typu set má definovány metody pro přidávání a mazání prvků množiny.
mnoz.add(x) | Přidá prvek x do množiny mnoz. Pokud jej množina už obsahuje, nebude přidán. |
mnoz.remove(x) | Z množiny mnoz vymaže prvek x. Nebude-li nalezen, vyvolá výjimku KeyError. |
mnoz.discard(x) | Pokud množina mnoz obsahuje prvek x, vymaže jej. Jinak nic nedělá. |
mnoz.pop() | Vyjme prvek z množiny mnoz (bude vymazán). Vyvolává výjimku KeyError, pokud je množina prázdná. |
mnoz.clear() | Vymaže všechny prvky množiny mnoz. |
Oba typy množin - konstantní i nekonstantní - dále obsahují metody pro práci s množinami. Pro tyto metody jsou přetíženy některé operátory. Vše naleznete v následující tabulce:
m.issubset(n) nebo m <= n | Kontroluje, zda je množina m podmnožinou n. |
m.issuperset(n) nebo m >= n | Kontroluje, zda je v množině m obsažena množina n - tj. zda je m nadmnožinou n. |
m.union(n) nebo m | n | Vrátí sjednocení množin. |
m.intersection(n) nebo m & b | Vrátí průnik množin. |
m.difference(n) nebo m - n | Vrátí rozdíl množin. |
m.symmetric_difference(n) nebo m ^ n | Symetrická diference. Pracuje podobně jako XOR. |
Vrací novou kopii objektu množiny m. Jedná se o mělkou kopii. |
Objekty typu set navíc obsahují metody, které umožňují přímo aktualizovat volající metodu.
U všech druhů množin můžete také používat funkci len() a klíčové slovo in.
Tato funkce vrací hodnotu hashe objektu argumentu. Vrácenou hodnotou může být pouze celé číslo. Argumentem může být pouze konstantní objekt. Používá se k rychlému porovnávání klíčů slovníků při vyhledávání. Předáte-li jako argumenty čísla různého typu, ale se stejnou hodnotou, budou mít vždy stejnou hodnotu hashe.
>>> hash(7) 7 >>> hash(7L) 7 >>> hash(7.0) 7 >>> hash(7 + 0j) 7 >>>
Matrix: až vyhrajou stroje, bude konečně klid.Oni už dávno vyhráli, ale že by byl klid jsem si nevšiml. Ani tady v Matrixu ani v reálném světě
Sorry za OT.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.