दिलचस्प पोस्ट
पिछले ड्रॉपडाउन चयन के आधार पर एक दूसरा ड्रॉपडाउन दिखाएं जाँच कैसे करें कि एक चर का प्रकार स्ट्रिंग है? सफारी / क्रोम (वेबकिट) – iframe ऊर्ध्वाधर स्क्रॉलबार छुपा नहीं जा सकता कर्सर। वर्तमान बनाम यह। कर्सर कस्टम QuerySet और प्रबंधक DRY को तोड़ने के बिना? एनएटी (विनफॉर्म्स) में किसी रूप में नियंत्रण केंद्रों पर केंद्रित है? $ _SESSION चर कहाँ संग्रहीत हैं? C ++ हेडर फाइलों के लिए विज़ुअल स्टूडियो कहाँ दिखता है? जावा: एक कंस्ट्रक्टर में एक नया थ्रेड प्रारंभ करना Setup.py क्या है? कैसे चर घोषित करने के लिए और उसी एसक्यूएल स्क्रिप्ट में उपयोग करें? (ओरेकल एसक्यूएल) आईफ़ोन पर एनएसएक्सएलएल पार्सर, मैं इसका इस्तेमाल एक्सएमएल फाइल में कैसे करूँ? कोड इग्नेटर में हैडर और पादलेख $ (विंडो) के बीच अंतर क्या है। लोड और $ (दस्तावेज़)। हेडर फाइलों में वैरिएबल घोषणा – स्थिर या नहीं?

लूप पायथन में सूची तत्वों को संशोधित नहीं किया जा सकता

पायथन में एक सूची पर पाशन करते समय, मैं तत्वों की सूची के बिना तत्वों को संशोधित करने में असमर्थ था। सन्दर्भ के लिए:

li = ["spam", "eggs"] for i in li: i = "foo" li ["spam", "eggs"] li = ["foo" for i in li] li ["foo", "foo"] 

तो, मैं पायथन में लूप के माध्यम से तत्व क्यों संशोधित नहीं कर सकता? निश्चित रूप से मुझे याद आ रही है, लेकिन मुझे नहीं पता कि क्या है। मुझे यकीन है कि यह एक डुप्लिकेट है, लेकिन मुझे इसके बारे में कोई सवाल नहीं मिला, और यदि कोई लिंक है, तो यह पर्याप्त से अधिक होगा आपका अग्रिम में ही बहुत धन्यवाद!

वेब के समाधान से एकत्रित समाधान "लूप पायथन में सूची तत्वों को संशोधित नहीं किया जा सकता"

क्योंकि for i in li काम करता है for i in li इस तरह से कुछ है:

 for idx in range(len(li)): i = li[idx] i = 'foo' 

इसलिए यदि आप i को कुछ सौंपते हैं, तो यह li[idx] को प्रभावित नहीं करेगा।

इसका हल या तो है जो आपने प्रस्तावित किया है, या सूचकांक के माध्यम से पाशन:

 for idx in range(len(li)): li[idx] = 'foo' 

या enumerate उपयोग करें:

 for idx, item in enumerate(li): li[idx] = 'foo' 

वास्तव में सूची की समझ के साथ आप सूची को संशोधित नहीं कर रहे हैं, आप एक नई सूची बना रहे हैं और फिर उस चर को निर्दिष्ट कर रहे हैं जिसमें पिछले एक है।

वैसे भी, जब आप li में करते हैं तो आपको वेरिएबल में li के प्रत्येक मान की एक प्रति प्राप्त हो रही है, आप li में स्थिति का संदर्भ नहीं पा रहे हैं, इसलिए आप li में किसी भी मान को संशोधित नहीं कर रहे हैं।

यदि आप अपनी सूची को संशोधित करना चाहते हैं तो आप यह enumerate साथ कर सकते हैं:

 >>> li = ["spam", "eggs"] >>> for i,_ in enumerate(li): li[i] = "foo" >>> li ['foo', 'foo'] 

या xrange साथ (पायथन 2.7 में, अजगर 3 में श्रेणी का उपयोग करें):

 >>> for i in xrange(len(li)): li[i] = "foo" >>> li ['foo', 'foo'] 

या आपके प्रश्न में सूची की समझ के साथ दिखाया गया है।

मैं पाशन करते समय एक सूची को संशोधित करने में सक्षम हूं:

 lst = range(10) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] for i, elem in enumerate(lst): lst[i] = 0 // [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 

for element in li – तत्व की एक प्रति देता है, न कि तत्व ही।

आपके मामले का समाधान होगा:

 for i in range(len(li)): li[i] = 'foo' 

शायद शब्दकोशों का उपयोग उपयोगी हो सकता है

 >>> li = {0: "spam", 1:"eggs"} for k, v in li.iteritems(): li[k] = "foo" >>> li {0: 'foo', 1: 'foo'}