2014-05-12 13 views
5

अजगर []*2 में, []पायथन में लंबाई एन की खाली सूचियों का अनुक्रम?

सबसे आसान तरीका बजाय [[],[]] पाने के लिए क्या है देता है?

+1

इसके अलावा http://stackoverflow.com/questions/12791501/python-initializing-a-list-of-lists – thefourtheye

+0

चीयर्स मोड, टच ', लेकिन समस्या यह है कि डुप्ले का शीर्षक सटीक नहीं है यह कुशलता से - मैं उनके –

उत्तर

5

आप शायद चाहते हैं:

[[] for _ in range(n)] 

[[]] * n के विपरीत, इस आप अद्वितीय भीतरी सूची (एक को जोड़कर उन्हें सभी को संलग्न नहीं है) दे देंगे। उदा .:

>>> x = [[] for _ in range(n)] 
>>> x[0].append(1) 
>>> x 
[[1], [], []] 

की तुलना में:

>>> x = [[]] * 3 
>>> x[0].append(1) 
>>> x 
[[1], [1], [1]] 

ध्यान दें कि यह बाद मुहावरा ([[]] * n) एक बहुत आम गलती है कि बहुत अक्सर विभिन्न संदर्भों में यहाँ के आसपास फसलों है।

4

उपयोग समझ:

[[] for _ in range(2)] 
-2

ऐसा इसलिए है क्योंकि (जैसे) [1]*3[1,1,1] देता है, उदा, एक दृश्य सूची की सामग्री से युक्त।

इसलिए आप मूल्य [] डुप्लिकेट करना चाहते हैं:

a = [[]]*2 

जिस तरह से * ऑपरेटर काम करता है की दे रही है

[[], []] 

, इस ही सूची की प्रतियां देता है। इसलिए, यदि आप इनमें से किसी भी खाली खाली सूचियों को संशोधित करने का प्रयास करते हैं, तो यह दोनों को प्रभावित करता है। (चूंकि वे खाली हैं, केवल एक चीज के बारे में आप उन्हें जोड़ सकते हैं; यानी, a[0].append(1)[[1],[1]] देता है।) यह संभवतः संभव है, लेकिन संभावना है कि आप क्या चाहते हैं।

+5

संपादित करूँगा क्यों डाउनवोट? –

+5

अब 'ए = [[]] * 2 आज़माएं; एक [0] .append (1); एक – bereal

+2

प्रिंट करें इसी कारण से हमने अन्य सभी हटाए गए उत्तरों को घटा दिया। – roippi

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