Компонент архитектуры навигации: Как я могу перемещаться по фрагменту из заднего стека?

Используйте функцию генератора.

from collections import defaultdict

def with_running_count(values):
    counts = defaultdict(int)
    for value in values:
        counts[value] += 1
        yield value, counts[value]

>>> print(*with_running_count('abaab'))

('a', 1) ('b', 1) ('a', 2) ('a', 3) ('b', 2)

Одно из преимуществ использования генератора над другими предложениями состоит в том, что генераторы ленивы. Это означает, что вы можете передавать итераторы, которые возвращают бесконечный (или очень большой) поток данных, поскольку генератор потребляет только входной поток по мере необходимости.

# an endless iterator
coin = iter(lambda: random.choice(['heads', 'tails']), None)

# the running count will also be endless        
toss = with_running_count(coin)

>>> next(toss), next(toss), next(toss)
(('tails', 1), ('tails', 2), ('heads', 1))
0
задан Mina George 18 January 2019 в 20:35
поделиться