2016-01-13 109 views
1

我正在使用Enthought canopy Python 2.7.9。
涉及forrange,並len 一個非常簡單的Python程序:索引錯誤:列表索引超出範圍

num = 10 
mylist = range(num) 
for i in range(len(mylist)): 
    print "Size of mylist is %d" %(len(mylist)) 
    print "i=%d" %(i) 
    print "mylist[%d] %d" %(i, mylist[i]) 
    mylist=mylist[:-1] 

令我百思不解的是,由於mylist長度已減少到5,爲什麼指數i尚可5,導致指數錯誤?

我知道在Python中的for-loop工作與迭代。但我不知道這個機制在這個例子中是如何工作的。

+1

作爲一個方面說明,你通常應該使用'my_list'中更習慣的''item。如果你還需要和索引,請查看'enumerate()'。 – foresmac

回答

2

在迭代時不要改變列表的大小。刪除此行:

mylist=mylist[:-1] 

它會工作。

列表的長度僅確定曾經在這裏:

for i in range(len(mylist)): 

i將承擔所有值從0通過9。稍後更改列表的大小時,將不會重新計算長度。

+0

要添加到Mike在這裏說的話,在循環的開始'my_list'是10個項目列表的標識符。由於您在該列表上使用了'len()',因此您的循環將迭代10次。但是在循環中,您將重新分配'my_list'標識符,以在每次迭代中指向越來越小的列表。 – foresmac