ฉันต้องการแยก 2 กำเนิดของความยาว (อาจ) แตกต่างกันด้วยzip
:
for el1, el2 in zip(gen1, gen2):
print(el1, el2)
อย่างไรก็ตามหากgen2
มีองค์ประกอบน้อยกว่าหนึ่งองค์ประกอบพิเศษของgen1
คือ "บริโภค"
ตัวอย่างเช่น,
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
เห็นได้ชัดว่ามีค่าขาดหายไป ( 8
ในตัวอย่างก่อนหน้าของฉัน) เพราะgen1
อ่าน (เช่นการสร้างมูลค่า8
) ก่อนที่จะตระหนักว่าgen2
ไม่มีองค์ประกอบเพิ่มเติม แต่ค่านี้จะหายไปในจักรวาล เมื่อgen2
"นานขึ้น" จะไม่มี "ปัญหา" ดังกล่าว
คำถาม : มีวิธีเรียกคืนค่าที่หายไปนี้ (เช่น8
ในตัวอย่างก่อนหน้าของฉัน) หรือไม่? ... นึกคิดด้วยจำนวนตัวแปรที่ขัดแย้งกัน (เช่นเดียวกับzip
)
หมายเหตุ :ขณะนี้ฉันได้ใช้งานในวิธีอื่นโดยใช้itertools.zip_longest
แต่ฉันสงสัยจริงๆว่าจะใช้ค่าที่หายไปนี้ได้อย่างไรโดยใช้zip
หรือเทียบเท่า
หมายเหตุ 2 :ฉันได้สร้างการทดสอบการใช้งานที่แตกต่างกันใน REPL นี้ในกรณีที่คุณต้องการส่งและลองใช้งานใหม่ :) https://repl.it/@jfthuong/MadPhysicistChester
zip()
ได้อ่าน8
จากgen1
มันหายไป