Vlákno názorů k článku Práce s nekonečnými sekvencemi v knihovně funcy od Ravise - Kap. 11, otázky k zamyšlení: chybí mi tam...

  • Článek je starý, nové názory již nelze přidávat.
  • 12. 9. 2023 18:32

    Ravise
    Stříbrný podporovatel

    Kap. 11, otázky k zamyšlení: chybí mi tam samozřejmě nultá otázka (Proč tu není itertools.product? Co za magii se tu děje, že zipování cyklů vypadá líp?), ale určitě nebudou chodit soudělné délky...

    >>> from funcy import take, cycle
    >>> letters = "abcdef" # 2*3
    >>> numbers = range(10) # 2*5
    >>> n = len(letters) * len(numbers)
    >>> uniq = set(take(n, zip(cycle(letters), cycle(numbers))))
    >>> assert len(uniq) == n, f"Expected {n} items, got {len(uniq)} items."
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    AssertionError: Expected 60 items, got 30 items.

    ... což je dost silné tvrzení, takže "nesoudělné délky všech iterátorů pod cykly" by mohla být dostačující podmínka. Ale prvočísla z příkladu od karet budou chodit určitě. Samy otázky čtenáře navádí, že dělat kartézský součin z cyklů není úplně šťastné :)

  • 13. 9. 2023 17:35

    Pavel Tišnovský
    Zlatý podporovatel

    přesně tak, ono to chodí díky tomu, že každá barva má 13 karet, což zrovna tady je pěkné číslo.

    A ne, to řešení není pěkné, právě proto je dobré se zamyslet, jestli se používá správná věc na správném místě.

    O itertools bude samostatný článek (asi měl vyjít před funcy, to by bylo didakticky správnější).