反转列表时“列表索引超出范围”

2024-09-29 17:15:01 发布

您现在位置:Python中文网/ 问答频道 /正文

问题是关于在K的组中反转大小为N的列表a。例如,如果A = [1,2,3,4,5]k = 3Output = [3,2,1,5,4] 当我运行第4行时,我得到的错误是列表索引超出范围

def reverseInGroups(A,N,K):   
    arr1 = []
    for i in range(K):
        arr1.append(A[(N-i)%K]) #line 4
    for j in range(N-K):
        arr1.append(A[N-j-1])
    return arr1

Tags: in列表foroutputreturndef错误line
3条回答

似乎无法重现您的'List index out of range'错误,但您的逻辑有错误:

reverseInGroups(A,N,K):   
    arr1 = []
    for i in range(K):
        arr1.append(A[(N-i)%K]) #line 4
    for j in range(N-K):
        arr1.append(A[N-j-1])
    return arr1
print(reverseInGroups([1,2,3,4,5],5, 3))  # works, others get wrong result
print(reverseInGroups([1,2,3,4,5,6],6, 3))  # wrong result: [1, 3, 2, 6, 5, 4]

印刷品:

[3, 2, 1, 5, 4] # correct
[1, 3, 2, 6, 5, 4] # wrong

您可以修复此问题,并通过将其打包到列表中使其变小:

def revv(L,k): 
    return [w for i in (L[s:s+k][::-1] for s in range(0,len(L),k)) for w in i]

for gr in range(2,8):
    print(gr, revv([1,2,3,4,5,6,7,8,9,10,11],gr))

要获得:

2 [2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 11]
3 [3, 2, 1, 6, 5, 4, 9, 8, 7, 11, 10]
4 [4, 3, 2, 1, 8, 7, 6, 5, 11, 10, 9]
5 [5, 4, 3, 2, 1, 10, 9, 8, 7, 6, 11]
6 [6, 5, 4, 3, 2, 1, 11, 10, 9, 8, 7]
7 [7, 6, 5, 4, 3, 2, 1, 11, 10, 9, 8]

这将实现您试图实现的目标:

def reverseInGroups(A,K):
    N = len(A)
    arr1 = []
    for i in range(0, N, K):
        arr1.extend(A[i : i+K][::-1])
    return arr1

print(reverseInGroups([1,2,3,4,5], 3))

有趣的是,问题中的代码实际上在示例中起作用,但它不是通用的。它工作的情况是N=2*K-1(尽管它不工作,但元素的顺序错误,而不是索引器)

您也可以尝试以下方法:

def reverse(l, n):
    result = []
    for i in range(0, len(l)-1, n):
        for item in reversed(l[i:i+n]):
            result.append(item)
    for item in reversed(l[i+n:]):
        result.append(item)
    return result

相关问题 更多 >

    热门问题