Существует ли стандартный питоновский способ выбора значения из списка предоставленных итераторов без продвижения тех, которые не были выбраны?Селектор итератора в Python
Что-то в духе этого в течение двух итераторов (не судите слишком трудно: она быстро выброшен вместе только для иллюстрации идеи):
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)]
тогда неизбираемый итератор продвигается каждый раз, чего я не хочу.
Кстати, это произойдет, если один из двух итераторов был исчерпан, даже если у другого еще осталось больше элементов. Это намеченное поведение? – Reti43
@ Reti43 Да, это именно то, что мне нужно (в соответствии с 'zip' или' izip') –