2014-03-06 98 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]是不可访问的。这就是为什么你得到索引错误