Saya ingin menguraikan 2 generator dengan (berpotensi) berbeda panjang dengan zip
:
for el1, el2 in zip(gen1, gen2):
print(el1, el2)
Namun, jika gen2
memiliki lebih sedikit elemen, satu elemen tambahan gen1
adalah "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 ( 8
dalam contoh saya sebelumnya) karena gen1
dibaca (sehingga menghasilkan nilai 8
) sebelum disadari gen2
tidak 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 8
dalam contoh saya sebelumnya)? ... idealnya dengan sejumlah variabel argumen (seperti zip
halnya).
CATATAN : Saat ini saya telah menerapkan cara lain dengan menggunakan itertools.zip_longest
tetapi saya benar-benar bertanya-tanya bagaimana cara mendapatkan nilai yang hilang ini menggunakan zip
atau 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 8
dari gen1
, itu hilang.