围绕列表索引循环

问题描述 投票:0回答:2

我有一个整数列表,

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
或正数时会出现问题,这将返回一个空列表。

python list slice
2个回答
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

0
投票

你可以利用 Python 的能力来操纵负索引并让它为你工作。通过从负索引开始执行此操作。前向进展将自动环绕零进入正指数:

R = [ L[i]+L[i+1] for i in range(1-len(L),1) ]

print(R)
[5, 7, 9, 6, 3]
© www.soinside.com 2019 - 2024. All rights reserved.