2011-05-06 16 views
5
में कंटेनर सूची

मेरा प्रश्न पाश के लिए निम्नलिखित के संबंध में है:समझ अजगर

x=[[1,2,3],[4,5,6]] 
for v in x: 
    v=[0,0,0] 
यहाँ

अगर आप एक्स आप [] मिल [1,2,3 प्रिंट, [4,5, 6]] .. तो वी बदल गया वास्तव में एक्स में सूची का संदर्भ नहीं है। लेकिन जब आप निम्नलिखित की तरह कुछ करना:

x=[[1,2,3],[4,5,6]] 
for v in x: 
    v[0]=0; v[1]=0; v[2] =0 

तो आप एक्स के रूप में मिलता है [[0,0,0], [0,0,0]]। इस थोड़े मुश्किल हो जाता है अगर एक्स के अंदर सूची काफी लंबी है, और कुछ इस तरह भी कर रही है:

x=[[1,2,3],[4,5,6]] 
for v in x: 
    for i in v: 
    i = 0 

मुझे दे देंगे एक्स के रूप में [[1,2,3], [4,5,6]]। मेरी सबसे अच्छी शर्त xrange (0,3) में का उपयोग करना है: v [i] = 0 .. हालांकि मैं अभी भी जानना चाहता हूं कि यहां क्या हो रहा है और जब मेरे पास सूचियों की सूची है तो अन्य विकल्प क्या हैं या अधिक नेस्टेड सूचियां।

उत्तर

7

जब अजगर कार्यान्वित v = [0, 0, 0], यह

  1. उस में तीन शून्य के साथ एक नई सूची वस्तु बनाना है।
  2. किसी लेबल की नई सूची के लिए एक संदर्भ नियत v

कहा जाता है इससे कोई फर्क नहीं पड़ता अगर v कुछ के लिए एक संदर्भ किसी और से पहले था।

आप इस सूची में वर्तमान v द्वारा संदर्भित की सामग्री को बदलना चाहते हैं, तो आप v = सिंटैक्स का उपयोग नहीं कर सकते। आपको इसका उल्लेख करने के लिए तत्वों को असाइन करना होगा, जैसे आपने उल्लेख किया है, या स्लाइस नोटेशन v[:] = का उपयोग स्वेन द्वारा नोट किया गया है।

+2

की सूची की सूची की सूची तैयार करने में यह एक बेहतर जवाब है' मैं बस आलसी था स्वेन की तुलना में, क्योंकि यह केवल एक नुस्खा को अंधाधुंध करने के बजाय, जो कुछ हो रहा है, उसे समझाने का प्रयास करता है। (कम से कम, मैं अब स्वेन में देखता हूं; शायद वह इसे संपादित करेगा।) –

+0

अब तक स्पष्टीकरण के लिए धन्यवाद। तो, हम सूची तत्व 'v' पाश शरीर में की ओर इशारा करते है उत्परिवर्तित करने के लिए, का उपयोग करते हुए' वी में सक्षम हैं [:] = ... ', क्योंकि इस सूची तत्व ** एक सूची ही ** है। अब, अगर यह सिर्फ एक पूर्णांक या एक सूची से कुछ और हो सकता है - वहाँ पाश हैडर बदले बिना यह उत्परिवर्तित के लिए एक रास्ता है? –

+0

@ जन-फिलिप गेहरके: कुछ प्रकार, जैसे int, अपरिवर्तनीय हैं। यही कारण है कि उस प्रकार कभी नहीं अपने मूल्य बदल सकते हैं का एक उदाहरण है। आम अपरिवर्तनीय प्रकार सांख्यिक प्रकार, स्ट्रिंग्स और tuples हैं। – recursive

6
x = [[1,2,3],[4,5,6]] 
for v in x: 
    v[:] = [0,0,0] 

चाल चलाना चाहिए।

+0

अच्छा :) ... मुझे लगा कि अगर मेरे पास _x = [[1,2,3], [4,5,6]] है; x = [x, x] _ .. तब -i मेरी नेस्टेड सूची के अंत में एक ही अप्राच का उपयोग कर सकता है .. इस तरह: _ में v के लिए x: i में v: i [:] = [0,0, 0] _ – Jose

+0

@user: सावधान रहें। जब आप 'x = [x, x]' कहते हैं, तो नई सूची में दो तत्वों की एक ही पहचान होती है, इसलिए आप जो भी परिवर्तन करते हैं, वह दूसरे को प्रभावित करेगा। (वास्तव में, वहाँ केवल एक ही है) – recursive

+0

खेद मैं शायद मतलब 'एक्स = [एक्स [:], एक्स [:]] जब पूर्णांकों – Jose

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