आप यहां क्या प्रयास कर रहे हैं उसे स्लाइस आकलन कहा जाता है। पायथन में एक अन्य पुनरावर्तनीय (my_list[0:1]
आपके मामले में) के एक टुकड़े के लिए एक पुनरावर्तनीय (my_list[1]
अपने मामले में) असाइन करना संभव है। कुछ उदाहरण के माध्यम से चलना देता है समझने के लिए यह वास्तव में मतलब है:
>>> l = [1,2,3,4,5]
>>> b = [6,7,8]
>>> l[0:3] = b
>>> l
>>> [6, 7, 8, 4, 5]
तो 0,1,2
सूचकांक के लिए सूची l
के भाग यहाँ क्या हुआ है जो तत्वों 1,2,3
सूची b
6,7,8
के तत्वों की जगह शामिल किया गया है। हालांकि इस मामले में स्लाइस का आकार और प्रतिस्थापित तत्व मौके के बराबर होते हैं।
तो क्या होता है जब टुकड़ा आकार और iterable प्रतिस्थापित करने की बजाय, यह सिर्फ कॉपी किया जो कुछ तत्वों पूरे कटा हुआ भाग के साथ उपलब्ध हैं, बराबर
>>> l = [1,2,3,4,5]
>>> b = [6,7,8]
>>> l[0:4] = b
>>> l
>>> [6,7,8,5]
सूचना है कि इस आपरेशन किसी भी त्रुटि नहीं मिला नहीं हैं । इस मामले में, कटा हुआ तत्व 1,2,3,4
6,7,8
पिछले उदाहरण में प्रतिस्थापित करने योग्य इसे छोटा था।यदि टुकड़ा भाग छोटे
>>> l = [1,2,3,4,5]
>>> b = [6,7,8]
>>> l[0:1] = b
>>> l
>>> [6,7,8,2,3,4,5]
तो अब हम देख सकते हैं कि केवल पहला तत्व पूरे iterable b
ने ले ली है, तो क्या होगा।
आप इस व्यवहार का उपयोग सूची के एक विशिष्ट भाग को हटाने के लिए भी कर सकते हैं (जिसे मुझे कुछ स्थितियों में सुविधाजनक लगता है)।
>>> l = [1,2,3,4,5]
>>> l[0:2] = []
>>> l
>>> [3,4,5]
पहले दो तत्व यहां आसानी से हटा दिए जाते हैं।
तो आपके प्रश्न में उदाहरण ऊपर दिए गए उदाहरणों के समान है, सिवाय इसके कि आपके मामले में अनपॅकिंग सूची मान का एक अतिरिक्त चरण है। अनपॅकिंग सूची मूल्य हर बार होता है जब आप किसी अन्य सूची में सूची असाइन करते हैं। एक छोटी उदाहरण
>>> l = [[1]]
>>> a = []
>>> a = l[0]
>>> a
>>> [1]
आपका उदाहरण अब:
#Replace the slice [0:1] with my_list[1] perform unpacking list values as well
>>> my_list[1:2] = my_list[1]
>>> [1,2,3,4,5]
भी ध्यान रखें कि टुकड़ा काम तभी संभव है यदि आप iterable एक टुकड़ा करने के लिए आवंटित। यदि आप एक इंट या कुछ असाइन करने का प्रयास करते हैं जो एक टुकड़ा पायथन के लिए एक पुनरावर्तनीय नहीं है तो एक त्रुटि फेंक देगा।
>>> l = [1,2,3,4,5]
>>> b = [6,7,8]
>>> l[0:1] = b[1]
>>> Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only assign an iterable
है कि क्योंकि यह एक iterable यही कारण है कि अपने मामले my_list[1]
में कोई त्रुटि नहीं उठता।
'my_list = [1,2,3]; my_list [1: 2] = [9,8,7] '=>' [1, 9, 8, 7,3] 'मैंने सोचा कि यह पाइथन का सामान्य व्यवहार है जबकि सूची – splash58
के साथ स्लाइस को प्रतिस्थापित करना इस' my_list [1: 2] = [my_list [1]] ' – Artier
मैंने स्पष्ट रूप से उल्लेख करने के लिए उत्तर में से एक उत्तर संपादित किया है कि आप असाइनमेंट के दोनों किनारों पर विभिन्न आकार की सूचियों का उपयोग कर सकते हैं। * "अकेले बताएं कि यह किस तरह से काम करता है।" * आप किस तरह के उत्तर की उम्मीद करते हैं? https://stackoverflow.com/a/10623352/2301450 और https://stackoverflow.com/a/35632876/2301450 दोनों सही हैं। – vaultah