Tôi muốn phân tích 2 trình tạo có độ dài khác nhau (có khả năng) bằng zip
:
for el1, el2 in zip(gen1, gen2):
print(el1, el2)
Tuy nhiên, nếu gen2
có ít yếu tố hơn, một yếu tố phụ gen1
là "tiêu thụ".
Ví dụ,
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
Rõ ràng, một giá trị bị thiếu ( 8
trong ví dụ trước của tôi) vì gen1
được đọc (do đó tạo ra giá trị 8
) trước khi nó nhận ra gen2
không có nhiều phần tử. Nhưng giá trị này biến mất trong vũ trụ. Khi gen2
"dài hơn", không có "vấn đề" như vậy.
HỎI : Có cách nào để lấy lại giá trị còn thiếu này không (ví dụ 8
trong ví dụ trước của tôi)? ... lý tưởng với số lượng đối số thay đổi (như zip
hiện).
LƯU Ý : Hiện tại tôi đã triển khai theo cách khác bằng cách sử dụng itertools.zip_longest
nhưng tôi thực sự tự hỏi làm thế nào để có được giá trị còn thiếu này bằng cách sử dụng zip
hoặc tương đương.
LƯU Ý 2 : Tôi đã tạo một số thử nghiệm về các triển khai khác nhau trong REPL này trong trường hợp bạn muốn gửi và thử triển khai mới :) https://repl.it/@jfthuong/MadPhysicistChester
zip()
đã đọc 8
từ gen1
, nó đã biến mất.