arrays - 在列表有超过 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。我该如何使用更优化的解决方案?
解决方案
基于这个答案: 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)
推荐阅读
- windows - 编写脚本以使用 PuTTY 通过串行连接执行一系列命令
- html - 以角度居中ngx分页元素
- rust - 终生子类型和 impl-trait
- php - 在没有 -iv -pass 的情况下在 PHP 中进行 Openssl 解密
- node.js - aws-sdk-mock - 模拟 s3.upload 不使用模拟实现
- javascript - 类型ORM SQL 子查询
- javascript - 有没有办法结合两个不同的正则表达式?
- if-statement - 如果下一行不包含文本,则删除行
- angular - 我如何在角度中使用 routerLink 进行 api 请求?
- asp.net-core - 如何在 Blazor Wasm 中使用 Azure AD 设置角色声明?