Существует ли стандартный питоновский способ выбора значения из списка предоставленных итераторов без продвижения тех, которые не были выбраны?
Что-то в духе этого для двух итераторов (не судите об этом слишком сложно: он был быстро брошен вместе, чтобы проиллюстрировать идею):
def iselect(i1, i2, f):
e1_read = False
e2_read = False
while True:
try:
if not e1_read:
e1 = next(i1)
e1_read = True
if not e2_read:
e2 = next(i2)
e2_read = True
if f(e1, e2):
yield e1
e1_read = False
else:
yield e2
e2_read = False
except StopIteration:
return
Обратите внимание, что если вы используете что-то вроде этого:
[e1 if f(e1, e2) else e2 for (e1, e2) in zip(i1, i2)]
то не выбранный итератор продвигается каждый раз, что не то, что я хочу.