Я бы перебрал iter(z)
, используя islice
, чтобы отправить ненужные элементы в забвение ... напр.
from itertools import islice
z = iter([1, 2, 3, 4, 5, 6, 7, 8])
for el in z:
print(el)
if el == 4:
_ = list(islice(z, 3)) # Skip the next 3 iterations.
# 1
# 2
# 3
# 4
# 8
Оптимизация
Если выпропуская maaaaaaany итераций, то в этот момент list
, если результат окажется неэффективным в памяти.Попробуйте итеративно потреблять z
:
for el in z:
print(el)
if el == 4:
for _ in xrange(3): # Skip the next 3 iterations.
next(z)
Спасибо @Netwave за предложение.
Если вы тоже хотите индекс, рассмотрите обтекание iter
вокруг enumerate(z)
вызов (для python2.7 .... для python-3.x iter
не требуется).
z = iter(enumerate([1, 2, 3, 4, 5, 6, 7, 8]))
for (idx, el) in z:
print(el)
if el == 4:
_ = list(islice(z, 3)) # Skip the next 3 iterations.
# 1
# 2
# 3
# 4
# 8