के रूप में अन्य लोगों ने कहा, append
सूची ही mutates और आप एक चर के लिए असाइन करें नहीं करना चाहिए। इसे निष्पादित करने से इसका डेटा बदल जाता है, जो प्रभावी रूप से इसे इंगित करने वाले सभी को अद्यतन करता है।
लेकिन, वहाँ एक चाल का उपयोग मैं जब मैं जबकि मौजूदा वस्तुओं परिवर्तनशील (बजाय a=[x + ['a'] for x in a]
का उपयोग कर नए लोगों को निर्माण, इस मामले में, या विशेष रूप से x + ['a']
) एक कार्यात्मक * तरह से काम करना चाहते हैं।
इसलिए, यदि आप बहादुर हैं पर्याप्त आप भी ऐसा कर सकते हैं:
>>> a=[[1,2],[3,4],[5,6]]
>>> a=[x.append('a') or x for x in a]
>>> a
[[1, 2, 'a'], [3, 4, 'a'], [5, 6, 'a']]
यह काम करता है क्योंकि append
रिटर्न None
, और or
पर जारी है एक सच-y मूल्य के लिए खोज करने के लिए है, जो x
है (यह list
है जिसमें कम से कम इसमें शामिल किया गया था)।
मुझे इसकी आवश्यकता क्यों है?
आप एक सूची हैं और आप एक नई सूची के लिए इसे के सदस्यों में से कुछ डालें, और उसके अनुसार संदर्भ अद्यतन करना चाहते:
>>> all = [[], [], [], []]
में से कुछ:
तो तुम सूची all
है यह डाला जाता है और एक नई सूची x
को अद्यतन किया जाता है:
>>> x = [i.append('x') or i for i in all[:2]]
>>> x
[['x'], ['x']]
all
से कुछ भी डाला जाता है और यू है एक सूची y
को pdated:
>>> y = [i.append('y') or i for i in all[1:3]]
all
अद्यतन किया जाता है:
>>> all
[['x'], ['x', 'y'], ['y'], []]
लेकिन x
भी अद्यतन किया जाता है:
>>> x
[['x'], ['x', 'y']]
और y
अपेक्षा के अनुरूप उत्पन्न होता है:
>>> y
[['x', 'y'], ['y']]
कुल मिलाकर, सरल कार्यों के लिए, मैं for
लूप को स्पष्ट रूप से अद्यतन करने का सुझाव देना चाहता हूं। यह पाइथोनिक माना जाता है।
def more_functional_append(self, x):
self.append(x)
return self
- functional programming, अनिवार्य रूप से एक ही बात कर रही है हर बयान पर और नहीं होने साइड इफेक्ट (ताकि आधारित है:
तकनीकी तौर पर, बोल यदि आप सूची वर्ग के लिए जाने की अनुमति थी, तो आप इस एक समारोह कर सकता है , उत्परिवर्तन और वापसी नहीं)। append
बहुत ही कार्यात्मक नहीं है क्योंकि यह एक सूची को बदलता है (शुद्ध कार्यात्मक प्रोग्रामिंग में केवल अपरिवर्तनीय वस्तुएं होती हैं) और अन्य क्रियाओं (कार्यों) को पास करने के लिए परिणाम नहीं लौटाती है। कार्यात्मक प्रोग्रामिंग अवधारणाओं का उपयोग करके आप महान बड़े एक-लाइनर बना सकते हैं, कोई भी पढ़ सकता है, जिसे "नौकरी सुरक्षा" या "खराब कोड" भी कहा जाता है।
यह ए 1 = [सब्लिस्ट + ['ए'] होना चाहिए जिसमें उपन्यास के लिए एक होना चाहिए]। 'ए' के चारों ओर ब्रैकेट नोट करें। –
हूप्स। फिक्स्ड। धन्यवाद। – Oddthinking