首页 > 解决方案 > 在列表有超过 1 个元素时继续删除奇数索引元素

问题描述

我有一个列表 li = [1,2,3,4],我每次都需要从列表中删除奇数索引,从列表中删除奇数索引后我会得到 2,4 然后我需要再次删除奇数元素和我会得到 4,这应该是我的输出。

我尝试在 Python 中解决这个问题:

li = [1,2,3,4,5]
arr = []
for i in range (len(li)):
    if(i%2 == 0):
        continue
    arr.append(li[i])
for i in range (len(arr)):
    if(i%2 == 0):
        continue
    print (arr[i])

但是对于相同的数组,即 li = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],我会得到 [4,8,12]并再次从 arr = [4,8,12] 中删除奇数索引。我将通过删除奇数索引元素得到输出 8。我该如何使用更优化的解决方案?

标签: arrayslist

解决方案


基于这个答案: Remove odd-indexed elements from list in Python

def removeOddIndexesTilOneElement(x):
    if len(x) == 1:
        return x

    del x[1::2]
    return removeOddIndexesTilOneElement(x)

li = [1,2,3,4,5]
print(removeOddIndexesTilOneElement(li))

请注意,在您使用 1,2,3,4 的示例中,我的函数实际上将删除 2 和 4,因为它们的索引是 1 和 3。索引从 0 开始。如果您想获得,您可能需要调整它以删除偶数索引4的结果。您可以将一行更改为: del x[0::2] 以摆脱偶数索引。

没有递归,没有切片技巧方法:

def removeOddIndex(x):
    ret = []
    for i in range (len(x)):
        if i%2 == 0:
            ret.append(x[i])
    return ret        
        

li = [1,2,3,4]

while len(li) > 1:
    li = removeOddIndex(li)

print(li)

推荐阅读