2015-10-04 129 views
-1

我尝试运行这个小循环。我得到一个错误:这究竟如何超出范围?

for i in range(len(lst)): 
    if lst[i] > lst[i+1]: 
     lst[i],lst[i+1] = lst[i+1],lst[i] 

错误:

Traceback (most recent call last): 
    File "C:/Python27/bubblesort.py", line 10, in <module> 
IndexError: list index out of range 

我不能完成我的脑海里这一点,我缺少什么?有人帮忙。

+4

既然你上去序列中的最后一个索引,然后再试着访问'I + 1',你为什么惊讶它是超出范围? – jonrsharpe

+0

尝试使用'len(lst) - 1'而不是'len(lst)' –

+0

FWIW,您可以使用扩展切片符号来交换您的列表项:'lst [i:i + 2] = lst [i + 1: I-1:-1]'。 –

回答

3

当列表有最后一个索引我,你增加它再次.... LST [I + 1]

2

i范围一路len(lst) - 1,这是lst的最后一个索引。但是你再添加1个,超越了最后一个索引:

>>> lst = ['foo', 'bar', 'baz'] 
>>> len(lst) 
3 
>>> lst[2] # length - 1 is the last element 
'baz' 
>>> lst[3] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IndexError: list index out of range 

限制你range()长度减1(所以最后ilen(lst) - 2)

for i in range(len(lst) - 1): 
0

Python列表指数从0开始不从1。例如,

list = ['a','b','c'] 
for element in list: 
    print element, 
    print list.index(element) 

输出

a 0 
b 1 
c 2 

print len(list) 

输出

3