मैं (संभावित) अलग लंबाई के 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, यह चला गया है।