我有一个整数列表,
L = [1, 2, 3, 4, 5]
,并且指定了一个数字x
。我需要编写一个函数,它会采用 L
的第一个元素,其索引为 0
,添加后续元素直到 x
,(所以 j+1
,j+2
,在我们的例子中),以及将其作为另一个列表 R
的第一个元素返回,并对后续元素执行相同的操作。诀窍是当j+1
或j+x
是> len(L)
时,我们需要在列表中循环。
例如;
R = [5 (2+3), 7 (3+4), 9 (4+5), 6 (5+1), 3 (1+2)]
当
x < 0
,说-2
,我们倒退而不是前进。所以j-1
到j-x
.
我为 x>0 编写了以下代码,但是我在使用索引时遇到了问题。
def decode(L, x):
R = []
if x > 0:
for j in L:
i1 = L.index(j)+1-len(L)
i2 = L.index(j)+x-len(L)
R[L.index(j)] = sum(L[i1:i2])+L[i2]
return R
当
i1
为负数且 i2
为 0
或正数时会出现问题,这将返回一个空列表。
R
是一个空列表,因此当您尝试访问 R[L.index(j)]
时,它将引发 IndexError
因为 R 中该索引处没有元素:
def decode(L, x):
R = []
n = len(L)
for i in range(n):
start = i
end = (i + x) % n
if x > 0:
sublist = L[start:end+1]
else:
sublist = L[end:start+1][::-1]
R.append(sum(sublist))
return R
你可以利用 Python 的能力来操纵负索引并让它为你工作。通过从负索引开始执行此操作。前向进展将自动环绕零进入正指数:
R = [ L[i]+L[i+1] for i in range(1-len(L),1) ]
print(R)
[5, 7, 9, 6, 3]