Mam dowolnie zagnieżdżone iterable tak:Python: Mapa funkcję nad rekurencyjnych iterables
numbers = (1, 2, (3, (4, 5)), 7)
i chciałbym mapować funkcję nad nim bez zmiany struktury. Na przykład, może chciałbym konwertować wszystkie numery na ciągi, aby uzyskać
strings = recursive_map(str, numbers)
assert strings == ('1', '2', ('3', ('4', '5')), '7')
Czy jest to dobry sposób to zrobić? Mogę zobrazować napisanie własnej metody ręcznego przemierzania numbers
, ale chciałbym się dowiedzieć, czy istnieje ogólny sposób mapowania rekursywnych iterables.
Ponadto, w moim przykładzie, jest w porządku, jeśli strings
daje mi zagnieżdżonych list (lub niektórych iterable) raczej zagnieżdżonych krotek.
Proszę wyjaśnić swój kod. –
Sądzę, że generalizujesz tylko * sekwencje *. To, czy coś jest iterowalne, nie jest problemem typu, ale podąża za protokołem. OP może oznaczać sekwencję, ale nie spowoduje to iteracji po zestawach, kanałach itd. To, czy coś jest iterowalne, jest zdefiniowane przez to, czy implementuje on protokół iterowalny –
@ juanpa.arrivillaga dzięki! zaktualizowana semantyka – Uriel