2014-03-06 95 views
1

我有具有這些元素的列表(列表由STR(元素)):列表索引超出範圍:蟒

['-0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15'] 

和欲處理它有這樣

['-0', '1#', '15#'] 
輸出

如果元素是-xi想讓它留在那裏,所以我取最後2個元素,如果間距是1,則刪除最後一個元素之前的元素。 下面是代碼:

  for k in range(len(l1)): 
       if "-" in (l1[-k] or l1[-k-1]): 
        print("debuggggg") 
        pass 
       elif(int(l1[-k]) - int(l1[-k-1])== 1 and int(l1[-k]) - int(l1[-k-2])== 2) : 
        a= l1[-2] 
        print(a) 
        l1.remove(a) 
        #print("debug 2") 
       elif(int(l1[-k]) - int(l1[-k-1])== 1): 
        a= l1[-2] 
        l1.remove(a) 
        l1[-2] = l1[-2] +"#" 
        l1[-1] = l1[-1] +"#" 
        print("3") 
       #elif(type(l1[-2]) is str): 
        #pass 

問題是在這裏:

debuggggg 
    14 
    13 
    12 
    11 
    10 
    9 
    8 

最後2個元素不包括字符「 - 」,但似乎他們做的。 此外後的8環腳本崩潰:

elif(int(l1[-k]) - int(l1[-k-1])== 1 and int(l1[-k]) - int(l1[-k-2])== 2) : 
IndexError: list index out of range 

,但它是不出來的列表的範圍。問題是什麼?

+2

你迭代通過l1並同時修改它,我也喜歡過生活。 –

回答

3

你的第二個問題

but it is not out the range of the list. What is the problem?

這僅僅是超出範圍的錯誤。

l1[-len(l1)-1] 

引發此錯誤。你正在代碼中這樣做。

for k in range(len(l1)): 
    ... 
    elif(int(l1[-k]) - int(l1[-k-1])== 1 and int(l1[-k]) - int(l1[-k-2])== 2) :#<--here(l1[-k-2]) 
+0

我更新了答案。 –

+0

謝謝,你應得到讚賞;) –

+0

不客氣。感謝您的建議。:-) –

3

您正在從列表中刪除項目。如果你從l1開始包含十個項目,那麼k將從0到9,但是如果你從l1刪除一個項目,那麼l1[9]不再存在。

而且我覺得if "-" in (l1[-k] or l1[-k-1]):正在測試"-"是否在l1[-k]l1[-k-1]的邏輯或,我不認爲這是你的原意?

3

您應該有一個迭代的源列表和一個插入元素的結果列表。

source_list = ['-1', '1', '2', '3'] 
results_list = [] 

for item in source_list: 
    # Do some tests, and put items into the results list if you want them. 
    # I think this is what you want, although I couldn't understand from your question. 
    if '-' in item: 
     results_list.append(item) 
    else: 
     results_list.append(item + '#') 

如果還有其他一些要求,請告訴我,我會嘗試修改我的示例。

3

yes是IndexError:列表索引超出範圍。因爲你試圖在第5行訪問l1 [-10],這在8次迭代之後在l1中不存在。

請參見下面的調試信息:

>>> l1 = ['-0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15'] 
>>> for k in range(len(l1)): 
...  if "-" in (l1[-k] or l1[-k-1]): 
...   print("debuggggg") 
...   pass 
...  elif(int(l1[-k]) - int(l1[-k-1])== 1 and int(l1[-k]) - int(l1[-k-2])== 2) : 
...   a= l1[-2] 
...   print(a) 
...   l1.remove(a) 
...   print l1 
...   #print("debug 2") 
...  elif(int(l1[-k]) - int(l1[-k-1])== 1): 
...   a= l1[-2] 
...   l1.remove(a) 
...   l1[-2] = l1[-2] +"#" 
...   l1[-1] = l1[-1] +"#" 
...   print("3") 
...  #elif(type(l1[-2]) is str): 
...   #pass 
... 
debuggggg 
14 
['-0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '15'] 
13 
['-0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '15'] 
12 
['-0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '15'] 
11 
['-0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '15'] 
10 
['-0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '15'] 
9 
['-0', '1', '2', '3', '4', '5', '6', '7', '8', '15'] 
8 
['-0', '1', '2', '3', '4', '5', '6', '7', '15'] 
Traceback (most recent call last): 
    File "<stdin>", line 5, in <module> 
IndexError: list index out of range 

我剛纔打印列表L1。經過8次迭代,int(l1 [-k-2]是不可訪問的。這就是爲什麼你得到索引錯誤