Скажем, вы хотите получить первые N элементов итерируемого объекта. Прямолинейный способ — использовать islice:
from itertools import islice
def fib():
a, b = 0, 1
while True:
yield b
a, b = b, (a + b)
list(islice(fib(), 5))
# Результат: [1, 1, 2, 3, 5]Если вы также хотите получить индексы элементов, можно применить enumerate:
list(enumerate(islice(fib(), 5)))
# Результат: [(0, 1), (1, 1), (2, 2), (3, 3), (4, 5)]Другой способ сделать это — использовать zip и range, что может показаться более читаемым:
list(zip(range(5), fib()))
# Результат: [(0, 1), (1, 1), (2, 2), (3, 3), (4, 5)]👉 @BookPython