Czy istnieje standardowy pythonowy sposób wybierania wartości z listy podanych iteratorów bez przesuwania tych, które nie zostały wybrane?Selektor iteratora w języku Python
Coś w stylu tego na dwa iteratory (nie oceniam tego zbyt mocno: szybko został wyrzucony razem tylko do zilustrowania idei):
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
pamiętać, że jeśli ktoś używa coś takiego zamiast :
[e1 if f(e1, e2) else e2 for (e1, e2) in zip(i1, i2)]
następnie niewybrany Iterator przesuwa się za każdym razem, co nie jest tym, czego chcę.
Nawiasem mówiąc, to zakończy się, gdy jeden z dwóch iteratorów zostanie wyczerpany, nawet jeśli drugi nadal będzie miał więcej elementów do wykonania. Czy to zamierzone zachowanie? – Reti43
@ Reti43 Tak, dokładnie tego potrzebuję (zgodnie z 'zip' lub' izip') –