Saya ingin menguraikan 2 generator dengan (berpotensi) berbeda panjang dengan zip:
for el1, el2 in zip(gen1, gen2):
print(el1, el2)
Namun, jika gen2memiliki lebih sedikit elemen, satu elemen tambahan gen1adalah "dikonsumsi".
Sebagai contoh,
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
Rupanya, nilai hilang ( 8dalam contoh saya sebelumnya) karena gen1dibaca (sehingga menghasilkan nilai 8) sebelum disadari gen2tidak memiliki elemen lagi. Tetapi nilai ini menghilang di alam semesta. Ketika gen2"lebih lama", tidak ada "masalah" seperti itu.
PERTANYAAN : Apakah ada cara untuk mengambil nilai yang hilang ini (yaitu 8dalam contoh saya sebelumnya)? ... idealnya dengan sejumlah variabel argumen (seperti ziphalnya).
CATATAN : Saat ini saya telah menerapkan cara lain dengan menggunakan itertools.zip_longesttetapi saya benar-benar bertanya-tanya bagaimana cara mendapatkan nilai yang hilang ini menggunakan zipatau setara.
CATATAN 2 : Saya telah membuat beberapa pengujian dari implementasi yang berbeda dalam REPL ini jika Anda ingin mengirim dan mencoba implementasi baru :) https://repl.it/@jfthuong/MadPhysicistChester
zip()sudah membaca 8dari gen1, itu hilang.