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