2011-04-13 20 views
114

निम्नलिखित कोड पर विचार करें:IndexError: सीमा से बाहर सूची असाइनमेंट सूचकांक

i = [1, 2, 3, 5, 8, 13] 
j = [] 
k = 0 

for l in i: 
    j[k] = l 
    k += 1 

print j 

निर्गम (7 विन 32-बिट पर अजगर 2.6.6) है:

> Traceback (most recent call last): 
>  j[k] = l IndexError: list assignment index out of range 

मुझे लगता है कि यह है कुछ सरल मैं समझ में नहीं आता। क्या कोई इसे साफ़ कर सकता है?

+3

'append' आपके उपयोग के मामले के लिए सही समाधान है, लेकिन पाइथन सूची पर एक सम्मिलित विधि है जो सूची में i'th स्थिति में सीधे डाली जा सकती है। 'j.insert (k, l)' – opensourcegeek

उत्तर

183

j एक खाली सूची है, लेकिन आप पहले पुनरावृत्ति में तत्व [0] पर लिखने का प्रयास कर रहे हैं, जो अभी तक मौजूद नहीं है।

सूची के अंत में एक नया तत्व जोड़ने के लिए बजाय निम्न, का प्रयास करें:

for l in i: 
    j.append(l) 
+1

ठीक है, बहुत बहुत धन्यवाद। मुझे नहीं पता था कि कौन सा प्रशंसा करता है क्योंकि तीन लगभग समान उत्तर हैं। यह मुझे लगता है कि सबसे वर्णनात्मक है। चीयर्स – Vladan

13

के बजाय j.append(l) करें और k से बचें।

+2

एक छोटा (अधिक पायथनिक) तरीका हो सकता है 'j + = [l] ' –

+2

@BlaXpirit: यह मुझे कचरा कलेक्टर को बोझ डाल देगा, मुझे लगता है। – khachik

+2

@ बालेक्सपिट: यह देखते हुए कि केवल कुछ पात्र बचाए जाते हैं (विशेष रूप से जब आपको इसे स्वीकार्य होने के लिए रिक्त स्थान जोड़ना होगा) और '.append' अधिक आम है (शायद एक कारण के लिए - मुझे लगता है कि समझना थोड़ा आसान है), किसी भी तरह से वास्तव में बेहतर नहीं है। (@khachik संपादित करें: नहीं, '+ =' जगह में संशोधित) – delnan

6
j.append(l) 

इसके अलावा लोअर केस का उपयोग कर "ल s" क्योंकि यह आसान है उन लोगों के साथ भ्रमित होने की के लिए से बचने

j = [None]*max(i) 
27

आपका दूसरा विकल्प j प्रारंभ करने में है आप पोस्ट, आप भी एक सूची समझ इस्तेमाल कर सकते हैं:

j = [l for l in i] 

या सिर्फ एक प्रतिलिपि बनाने:

j = i[:] 
9

उदाहरण के लिए: 1 के

+0

कि दूसरा निर्माण साफ है – javadba

1

एक और तरीका है:

j=i[0] 
for k in range(1,len(i)): 
    j = numpy.vstack([j,i[k]]) 

इस मामले j एक numpy हो जाएगा में सरणी

3

मुझे लगता है कि पाइथन विधि डालें यो क्या हैं आप की तलाश में

स्थिति i पर तत्व x डालें I।

array = [1,2,3,4,5] 

array.insert(1,2) 

print array 

# prints [2,2,3,4,5] 
3

आप जे

के लिए एक शब्दकोश (एक साहचर्य सरणी के समान) इस्तेमाल कर सकते हैं
i = [1, 2, 3, 5, 8, 13] 
j = {} #initiate as dictionary 
k = 0 

for l in i: 
    j[k] = l 
    k += 1 

print j 

प्रिंट होगा:

{0: 1, 1: 2, 2: 3, 3: 5, 4: 8, 5: 13} 
संबंधित मुद्दे