2011-07-25 16 views
6

मैं एक और सूची में किसी सूची में एक नया नाव तत्व संलग्न करने के लिए कोशिश कर रहा हूँ के भीतर एक सूची में कोई नया आइटम संलग्न, उदाहरण के लिए:एक सूची

list = [[]]*2 
list[1].append(2.5) 

और मैं निम्नलिखित मिल:

print list 
[[2.5], [2.5]] 

जब मैं प्राप्त करना चाहते हैं:

[[], [2.5]] 

मैं यह कैसे कर सकते हैं?

अग्रिम धन्यवाद।

+1

एजीएफ़ नीचे बताते हैं, यह, 'list' एक चर नाम के रूप में उपयोग करते हुए ही बेहतर होता है क्योंकि यह सामान्य रूप से बनाया का नाम है सूची सूची में। –

+0

अक्सर उपयोग की आसानी के लिए "एलएसटी" का उपयोग किया जाता है। –

उत्तर

15

lst = [[] for _ in xrange(2)] (या सिर्फ [[], []])। म्यूटेबल ऑब्जेक्ट्स के साथ गुणा का उपयोग न करें - आपको एक्स एक्स अलग-अलग एक्स नहीं मिलते हैं।

+4

मैं '_' का उपयोग नहीं कर रहा हूं, जाहिर है कि यह कुछ इंटरैक्टिव दुभाषियों को गड़बड़ कर सकता है। साथ ही, इसे 'सूची' न कहें, आप बिल्टिन मास्किंग कर रहे हैं। इसके अलावा, आप अपरिवर्तनीय वस्तुओं के लिए भी एक बार X बार प्राप्त करेंगे, यह अक्सर तब तक कोई फर्क नहीं पड़ता, जब तक आप बाद में ऑब्जेक्ट पहचान की जांच नहीं करना चाहते। – agf

+4

@ag: '_' मानक है" मुझे इस चर के बारे में परवाह नहीं है "चर। इसका उपयोग अंतिम परिणाम को स्टोर करने के लिए इंटरैक्टिव मोड द्वारा किया जाता है, लेकिन यह निश्चित रूप से कुछ भी गड़बड़ नहीं करता है। –

+0

मुझे पता है कि इसका क्या उपयोग किया जाता है। मैं अब भूल जाता हूं, लेकिन मेरा मानना ​​है कि यह आईडीई में से किसी एक में ट्रेसबैक को गड़बड़ कर देता है। – agf

2
list = [[]] 
list.append([2.5]) 

या

list = [[],[]] 
list[1].append(2.5) 
5
list_list = [[] for Null in range(2)] 

न यह list कहते हैं, कि आप में निर्मित समारोह list() कॉल करने से रोका जाएगा।

आपकी समस्या होने का कारण यह है कि पायथन एक सूची बनाता है, फिर इसे दो बार दोहराता है। तो, चाहे आप इसे list_list[0] या list_list[1] के साथ एक्सेस करके इसमें शामिल करते हैं, आप वही कर रहे हैं ताकि आपके परिवर्तन दोनों इंडेक्स में दिखाई दें।

1

आप कुछ इस तरह लिखना चाहिए:

>>> l = [[] for _ in xrange(2)] 
>>> l[1].append(2.5) 
>>> l 
[[], [2.5]] 
2

[] एक सूची निर्माता है, और [[]] में एक सूची है और एक sublist का निर्माण किया है। *2 भीतरी सूची के संदर्भ डुप्लिकेट, लेकिन कोई नई सूची का निर्माण किया है:

>>> list[0] is list[1] 
... True 
>>> list[0] is [] 
... False 

समाधान 2 भीतरी सूचियां बनाना है, list = [[], []]

0

आपका outter सूची एक और सूची और outter सूची होगा गुणा होता है परिणामी सूची के आइटमों में सभी की आंतरिक सूची में एक ही सूचक है। आप इस तरह रिकर्सिवली एक बहुआयामी सूची बना सकते हैं:

def MultiDimensionalList(instance, *dimensions): 
    if len(dimensions) == 1: 
      return list(
        instance() for i in xrange(
          dimensions[0] 
        ) 
      ) 
    else: 
      return list(
        MultiDimensionalList(instance, *dimensions[1:]) for i 
        in xrange(dimensions[0]) 
      ) 

print MultiDimensionalList(lambda: None, 1, 1, 0) 

[[]]

+2

ओवर-इंजीनियरिंग की तरह। –

+0

लेकिन आपको किसी भी आयाम की सूची बनाने की अनुमति देता है। –

+0

बेशक! ओवर-इंजीनियर सामग्री आमतौर पर आपको "ठंडा" चीजें करने देती है, लेकिन प्रारंभिक आवश्यकताओं के संबंध में इसकी अधिकांश आवश्यकता नहीं है ;-) –

2

@Cat प्लस प्लस के अनुसार न का उपयोग multiplication.I it.with ही अपने कोड के बिना की कोशिश की।

>> list = [[],[]] 
>> list[1].append(2.5) 
>> list 
>> [[],[2.5]] 
3

आप सबसे आसान तरीका में कर सकते हैं ....

>>> list = [[]]*2 
>>> list[1] = [2.5] 
>>> list 
[[], [2.5]] 
संबंधित मुद्दे