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, gen2daha 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 gen1okunan (böylece değeri üreten 8) gen2baş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_longestama gerçekten bu eksik değeri zipveya 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 8sonra gen1gitti.