我正在研究一個簡單的左循環移位函數(即餵它[1,2,3]
並返回[[1,2,3],[2,3,1],[3,1,2]]
)。如果我使用此版本的代碼:爲什麼此列表分配索引超出範圍?
def left_shifts(L):
if len(L) == 0:
M = []
elif len(L) == 1:
M = deepcopy(L)
else:
M = [len(L)]
M[0] = L
for i in range(1,len(L)):
M[i] = (L[i:] + L[:i])
return M
print (left_shifts([1,2,3,4,5]))
我收到一個錯誤,列表分配索引超出範圍。但是,如果我只是調整到這一點:
def left_shifts(L):
if len(L) == 0:
M = []
elif len(L) == 1:
M = deepcopy(L)
else:
M = [len(L)]
M[0] = L
for i in range(1,len(L)):
M.append((L[i:] + L[:i])) #changed line
return M
print (left_shifts([1,2,3,4,5]))
它工作正常。我的問題是:爲什麼上面的代碼會產生這個錯誤?我所做的只是將兩個列表加在一起,並將其分配給另一個列表中的一個元素,我認爲這將是合法的。
@ TigerhawkT3:這不是適用的。我認爲OP認爲'M = [len(L)]'創建了一個'len(L)'元素列表,在這一點上認爲存在'M [1]'並不是不合理的。 –
@MartijnPieters - 答案解釋了確切的問題。我認爲這是一個精確的重複。 – TigerhawkT3
@ TigerhawkT3:它不包含'[integer]',然後期待'integer'數量的元素存在。 –