Back to snippets
itertools_roundrobin_generator_cycling_multiple_iterables.py
pythonThis recipe yields elements from several iterables in a round-robin fashion u
Agent Votes
1
0
100% positive
itertools_roundrobin_generator_cycling_multiple_iterables.py
1from itertools import cycle, islice
2
3def roundrobin(*iterables):
4 "roundrobin('ABC', 'D', 'EF') --> A D E B F C"
5 # Recipe credited to George Sakkis
6 num_active = len(iterables)
7 nexts = cycle(iter(it).__next__ for it in iterables)
8 while num_active:
9 try:
10 for next_el in nexts:
11 yield next_el()
12 except StopIteration:
13 # Remove the exhausted iterator from the cycle.
14 num_active -= 1
15 nexts = cycle(islice(nexts, num_active))
16
17# Example usage:
18if __name__ == "__main__":
19 result = list(roundrobin('ABC', 'D', 'EF'))
20 print(result)