Aşağıdakilerle (potansiyel olarak) farklı uzunlukta 2 jeneratör ayrıştırmak istiyorum zip
:
for el1, el2 in zip(gen1, gen2):
print(el1, el2)
Ancak, gen2
daha az eleman varsa , fazladan bir eleman gen1
"tüketilir".
Örneğin,
def my_gen(n:int):
for i in range(n):
yield i
gen1 = my_gen(10)
gen2 = my_gen(8)
list(zip(gen1, gen2)) # Last tuple is (7, 7)
print(next(gen1)) # printed value is "9" => 8 is missing
gen1 = my_gen(8)
gen2 = my_gen(10)
list(zip(gen1, gen2)) # Last tuple is (7, 7)
print(next(gen2)) # printed value is "8" => OK
Görünüşe göre, bir değer eksik ( 8
önceki örneğimde) çünkü fark edilmeden gen1
okunan (böylece değeri üreten 8
) gen2
başka unsur yok. Ancak bu değer evrende kaybolur. Ne zaman gen2
"uzun" olduğunu, böyle bir "sorun" var.
SORU : Bu eksik değeri almanın bir yolu var mı (yani 8
önceki örneğimde)? ... ideal olarak değişken sayıda argümanla (olduğu gibi zip
).
NOT : Şu anda kullanarak başka bir şekilde uyguladım itertools.zip_longest
ama gerçekten bu eksik değeri zip
veya eşdeğerini kullanarak nasıl elde edeceğini merak ediyorum .
NOT 2 : Yeni bir uygulamayı göndermek ve denemek istemeniz durumunda, bu REPL'deki farklı uygulamaların bazı testlerini oluşturdum :) https://repl.it/@jfthuong/MadPhysicistChester
zip()
okuduktan 8
sonra gen1
gitti.