2016-05-04 35 views
2

我有以下MWE:IndexError在Python3

def get_files(): 
    file_list = ['first', 'second', 'third', 'fourth'] 
    return file_list 

def set_names(orig_flist): 
    file_list = [] 
    for i in range(len(orig_flist)): 
     file_list[i] = orig_flist[i] 
    return file_list 

set_names(get_files()) 

當我運行它,我得到這個錯誤:

Traceback (most recent call last): 
    File "privpub.py", line 11, in <module> 
    set_names(get_files()) 
    File "privpub.py", line 8, in set_names 
    file_list[i] = orig_flist[i] 
IndexError: list assignment index out of range 

我不明白這是怎麼回事。有人可以解釋我嗎?

+1

請注意,'set_names'中的循環只是將一個列表中的值複製到另一個列表中。這可以通過'file_list = list(orig_list)'完成。如果你不介意,那兩個列表將指向相同的數據結構,你也可以使用'file_list = orig_list'。在這種情況下,如果一個列表將被改變(例如附加值),另一個列表將會改變(因爲它指向相同的列表)。 –

+0

是的,我知道。原始功能做了一些不同的事情,但我簡化了它以獲得MWE。 – NVaughan

回答

3

您試圖將值分配到列表中的索引尚不存在:

file_list = [] 
for i in range(len(orig_flist)): 
    file_list[i] = orig_flist[i] 

你將要使用append爲了延長像這樣的列表:

file_list = [] 
for i in range(len(orig_flist)): 
    file_list.append(orig_flist[i]) 
+0

那麼索引必須先存在才能被分配? – NVaughan

+1

確實,如果'i'小於'len(my_list)',那麼只能爲'my_list [i]'賦值。否則,您需要使用'append()',通過在列表的長度上加1來將項目添加到列表的末尾。 – Will