gpt4 book ai didi

python - 如何删除列表中仅位于特定位置的元素?

转载 作者:行者123 更新时间:2023-12-01 00:34:57 25 4
gpt4 key购买 nike

我有一个 list x=[0,1,1,2,3,5,8,3,1]我只想删除奇数索引处的列表项即 x[1],x[3],x[5],... 等应该被删除。我的结果列表应该是x=[0,1,3,8,1]

def odd_indexed_list(x):
...

x = [0, 1, 1, 2, 3, 5, 8, 3, 1]
# ^ ^ ^ ^ ^

odd_indexed_list(x)

print(x)
# >> [0, 1, 3, 8, 1]

我想循环直到列表中只剩下一项。这是我的 odd_indexed_list()

版本
def odd_indexed_list(x):
n=len(x)
while(n>1):
for j in range(1,n+1,2):
del x[i]

错误是 - IndexError:列表分配索引超出范围

最佳答案

您正在尝试访问可能不再存在的索引。即:在迭代列表时不要修改列表。检查您的初始控制流,让我们看一个简单的示例:

x = [1, 2, 3]

len 为 3。但是,当您执行以下操作时:

del x[1]

x 现在的值为 [1, 3]len 已更改,因此在循环开始时有效的最终索引 2 现在无效。该索引与列表的状态无关。

通过快速重构,这可以通过列表理解轻松完成:

x = list(range(20))

x = [a for i, a in enumerate(x) if not i%2]

x
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

其中 enumerate 将生成可迭代的对 (index, element),并且 not i % 2 将确保索引是能被 2 整除(非奇数)。 enumerate 生成一个可以迭代的生成器,并且 index, element 对中的 index 直接与原始状态绑定(bind),使您能够准确地跳过您不想要的元素

关于python - 如何删除列表中仅位于特定位置的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57876919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com