2016-01-09 9 views
22

यहां कोड का एक स्निपेट है जो आउटपुट देता है: 0 1 2 2। मुझे 3 3 3 3 आउटपुट की उम्मीद थी क्योंकि a[-1] सूची में नंबर 3 तक पहुंचता है। ऑनलाइन दिए गए स्पष्टीकरण में कहा गया है कि "प्रत्येक पुनरावृत्ति में a[-1] का मान बदलता है" लेकिन मुझे समझ में नहीं आता कि कैसे या क्यों। कोई स्पष्टीकरण बहुत अच्छा होगा!लूप के लिए और सूचियों के माध्यम से पुनरावृत्त

a = [0, 1, 2, 3] 
for a[-1] in a: 
    print(a[-1]) 
+1

मैंने कभी ऐसा कुछ नहीं देखा है; मुझे लेख/ट्यूटोरियल/जो कुछ भी है, वह यह उदाहरण दिखाता है, क्या आप इसे लिंक पोस्ट कर सकते हैं? – GingerPlusPlus

+3

इसके अलावा, पहले पहले सवाल के लिए बधाई! (नए एसओ उपयोगकर्ताओं में विश्वास बहाल) – GingerPlusPlus

+3

अच्छा सवाल है। 'एक [-1]' लूप वैरिएबल के रूप में भी अनुमति क्यों है ... – timgeb

उत्तर

15

यहां क्या हो रहा है एक सूची लूपिंग के दौरान उत्परिवर्तित है।

a = [0, 1, 2, 3] 
for a[-1] in a: 
    print a 

आउटपुट है:

[0, 1, 2, 0] 
[0, 1, 2, 1] 
[0, 1, 2, 2] 
[0, 1, 2, 2] 

प्रत्येक यात्रा:

  • स्थिति से मूल्य वर्तमान में आंतरिक सूचक द्वारा बताया पढ़ता
  • तुरंत प्रदान करती है

    के कोड स्निपेट निम्नलिखित पर विचार करें यह तत्व अंतिम करने के लिए सूची

  • कि पिछले तत्व के बाद में मानक आउटपुट पर छपा रहता

तो यह प्रकार है:

    पहला तत्व को
  • आंतरिक सूचक अंक, यह 0 है, और अंतिम तत्व मूल्य के साथ ओवरराइट है; सूची [0, 1, 2, 0] है; मुद्रित मान 0
  • आंतरिक सूचक बिंदु दूसरे तत्व के लिए इंगित करता है, यह 1 है, और अंतिम तत्व उस मान के साथ ओवरराइट किया गया है; सूची [0, 1, 2, 1] है; मुद्रित मान 1
  • (...)
  • अंतिम चरण में, आंतरिक सूचक अंतिम तत्व को इंगित करता है; अंतिम तत्व स्वयं ही ओवरराइट किया जाता है - सूची अंतिम पुनरावृत्ति पर नहीं बदलती है; मुद्रित तत्व भी नहीं बदलता है।
34

जबकि for a[-1] in a कर रही है, आप वास्तव में सूची और अस्थायी दुकान के माध्यम से वर्तमान तत्व का मान a[-1] में पुनरावृति।

आप इन निर्देशों की तरह पाश देख सकते हैं:

a[-1] = a[0] # a = [0, 1, 2, 0] 
print(a[-1]) # 0 
a[-1] = a[1] # a = [0, 1, 2, 1] 
print(a[-1]) # 1 
a[-1] = a[2] # a = [0, 1, 2, 2] 
print(a[-1]) # 2 
a[-1] = a[3] # a = [0, 1, 2, 2] 
print(a[-1]) # 2 

इसलिए, जब आप तीसरे तत्व पर कर रहे हैं, तो 2a[-1] को संग्रहीत किया जाता है (जो मूल्य 1 है, लेकिन था 0 से पहले और 3 प्रारंभ पर)।

अंत में, जब यह अंतिम तत्व (और पुनरावृत्ति के अंत) की बात आती है, तो a[-1] में संग्रहीत अंतिम मान 2 है जो बताता है कि यह दो बार मुद्रित क्यों होता है।

संबंधित मुद्दे