我正在研究一个简单的左循环移位函数(即喂它[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'数量的元素存在。 –