2015-10-04 56 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