मैं कुछ इस तरह करना चाहता हूं:
myList = [10, 20, 30]
yourList = myList.append(40)
दुर्भाग्य से, सूची परिशिष्ट संशोधित सूची वापस नहीं करता है।
तो, मैं appendनई सूची को वापस करने की अनुमति कैसे दे सकता हूं ?
जवाबों:
इसके बजाय अपेंडेंस का उपयोग न करें:
yourList = myList + [40]
यह एक नई सूची देता है ; myListप्रभावित नहीं होगा। यदि आपको किसी भी तरह सेmyList प्रभावित करने की आवश्यकता है , तो असाइन करें.append()yourList अलग से (एक प्रति)myList ।
list.appendएक कमांड है, एक क्वेरी नहीं है।
अजगर 3 में आप पुराने को अनपैक करके और नया तत्व जोड़कर नई सूची बना सकते हैं:
a = [1,2,3]
b = [*a,4] # b = [1,2,3,4]
जब तुम करोगे:
myList + [40]
आपके पास वास्तव में 3 सूचियाँ हैं।
list.appendएक अंतर्निहित है और इसलिए इसे बदला नहीं जा सकता है। लेकिन अगर आप इसके अलावा कुछ और उपयोग करने को तैयार हैं append, तो आप कोशिश कर सकते हैं +:
In [106]: myList = [10,20,30]
In [107]: yourList = myList + [40]
In [108]: print myList
[10, 20, 30]
In [109]: print yourList
[10, 20, 30, 40]
निश्चित रूप से, इसका नकारात्मक पक्ष यह है कि एक नई सूची बनाई जाती है, जिसकी तुलना में बहुत अधिक समय लगता है append
उम्मीद है की यह मदद करेगा
आप अंतर्निहित सूची प्रकार को उप-वर्ग कर सकते हैं और 'परिशिष्ट' विधि को फिर से परिभाषित कर सकते हैं। या इससे भी बेहतर, एक नया बनाएं जो वही करेगा जो आप करना चाहते हैं। नीचे एक पुन: परिभाषित 'परिशिष्ट' विधि के लिए कोड है।
#!/usr/bin/env python
class MyList(list):
def append(self, element):
return MyList(self + [element])
def main():
l = MyList()
l1 = l.append(1)
l2 = l1.append(2)
l3 = l2.append(3)
print "Original list: %s, type %s" % (l, l.__class__.__name__)
print "List 1: %s, type %s" % (l1, l1.__class__.__name__)
print "List 2: %s, type %s" % (l2, l2.__class__.__name__)
print "List 3: %s, type %s" % (l3, l3.__class__.__name__)
if __name__ == '__main__':
main()
उम्मीद है की वो मदद करदे।
प्रयोग करके देखें itertools.chain(myList, [40])। यह एक जनरेटर को एक अनुक्रम के रूप में लौटाएगा, बजाय एक नई सूची आवंटित करने के। अनिवार्य रूप से, यह सभी तत्वों को पहले चलने वाले से लौटाता है जब तक कि यह समाप्त नहीं हो जाता है, फिर अगले चलने योग्य तक आगे बढ़ता है, जब तक कि सभी पुनरावृत्तियां समाप्त नहीं हो जाती हैं।
बस स्टॉर्स्टैंप के जवाब पर विस्तार करने के लिए
आपको केवल myList.append (40) करने की आवश्यकता है
यह इसे मूल सूची में जोड़ देगा, अब आप मूल सूची वाले चर को वापस कर सकते हैं।
यदि आप बहुत बड़ी सूचियों के साथ काम कर रहे हैं तो यह रास्ता तय करना है।
append()लौटने के पीछे तर्क क्या होगाNone? यह किस ज़ीन के सिद्धांत का उल्लंघन करेगा?