for elt in itertools.chain.from_iterable(node):
if elt is the last element:
do statement
मैं कैसे प्राप्त करते हैं इसपायथन मैं कैसे जांचूं कि अंतिम तत्व इटेटरेटर टूल श्रृंखला में पहुंचा है या नहीं?
for elt in itertools.chain.from_iterable(node):
if elt is the last element:
do statement
मैं कैसे प्राप्त करते हैं इसपायथन मैं कैसे जांचूं कि अंतिम तत्व इटेटरेटर टूल श्रृंखला में पहुंचा है या नहीं?
जब लूप समाप्त होता है, तो elt
वैरिएबल गुंजाइश से बाहर नहीं जाता है, और अभी भी लूप द्वारा दिया गया अंतिम मान रखता है। तो आप लूप के अंत में कोड डाल सकते हैं और elt
चर पर काम कर सकते हैं। यह बहुत सुंदर नहीं है, लेकिन पाइथन के स्कोपिंग नियम भी सुंदर नहीं हैं।
इस के साथ एकमात्र समस्या (धन्यवाद, cvondrick) यह है कि लूप कभी निष्पादित नहीं हो सकता है, जिसका अर्थ यह होगा कि elt
मौजूद नहीं है - हमें NameError
मिल जाएगा। ऐसा करने के लिए पूर्ण तरीका तो यह मोटे तौर पर होगा:
del elt # not necessary if we haven't use elt before, but just in case
for elt in itertools.chain.from_iterable(node):
do_stuff_to_each(elt)
try:
do_stuff_to_last(elt)
except NameError: # no last elt to do stuff to
pass
आप कर सकते हैं नहीं से प्रति। आपको वर्तमान आइटम को स्टोर करने, इटरेटर को अग्रिम करने और StopIteration
अपवाद को पकड़ने की आवश्यकता होगी। और फिर आपको किसी भी तरह संकेत करना होगा कि आपके पास अंतिम वस्तु है।
यह करना मुश्किल नहीं होगा, और यह एक सामान्य समाधान है, लेकिन वर्तमान कार्य के लिए पूरी तरह से आवश्यक नहीं है। –
आप मैन्युअल रूप से थोड़ी देर के पाश में इटरेटर को आगे बढ़ाने iter.next()
का उपयोग कर, तो StopIteration
अपवाद को पकड़ने करके ऐसा कर सकते:
>>> from itertools import chain
>>> it = chain([1,2,3],[4,5,6],[7,8,9])
>>> while True:
... try:
... elem = it.next()
... except StopIteration:
... print "Last element was:", elem, "... do something special now"
... break
... print "Got element:", elem
...
...
Got element: 1
Got element: 2
Got element: 3
Got element: 4
Got element: 5
Got element: 6
Got element: 7
Got element: 8
Got element: 9
Last element was: 9 ... do something special now
>>>
यह एक सामान्य समाधान (यानी पिछले दो, पिछले तीन, आदि) लेकिन अंतिम तत्व के लिए, मेरा समाधान (आईएमएचओ) क्लीनर है। –
आपके समाधान में कम कोड है, लेकिन आईएमओ यह कम स्पष्ट है क्योंकि यह एक गैर-स्पष्ट स्कॉइंग नियम पर निर्भर करता है। मैं अधिक स्पष्ट दृष्टिकोण पसंद करता हूं। –
मैं कुछ करना इस तरह:
rng = len(mlist)
for i in range(rng):
foo = mlist[i]
foo.do_something_for_every_item_regardless()
if i == rng - 1: #since we go from 0 to rng-1
foo.last_item_only_operation()
बस उस मामले में सावधान रहें जब लूप कभी निष्पादित नहीं होता क्योंकि इससे कुछ जंगली निष्पादन पथ हो सकता है। – carl
यह एक अच्छा मुद्दा है। इसे मेरे उत्तर में जोड़ना। –
बस 'अन्य' खंड में अंतिम तत्व पर लागू करने के लिए कोड ड्रॉप करें। –