gpt4 book ai didi

python - 删除 python 列表中的项目

转载 作者:太空宇宙 更新时间:2023-11-03 13:14:27 25 4
gpt4 key购买 nike

和b。我想删除列表 b 中存在“0”的所有数字以及 a 中与 b 中的零共享相同索引的相应数字。这是我的代码:

a = [ 1 , 23 , 3 , 45 , 5 , 63 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15]

b = [ 8 , 0 , 0 , 7 , 0 , 9 , 3 , 2 , 4 , 13 , 25 , 45 , 34 , 25 , 11]


indexzeroes = [i for i, j in enumerate(b) if j == 0]


for i in indexzeroes:
b.pop(i)
a.pop(i)

print a
print b

但是我得到了 a 和 b 的错误更新列表。我已经确定原因是在“for 循环”中,每次“弹出”一个项目时我都更改了列表结构,这样剩余零的索引也会发生变化。

对于这样一个表面上看起来很简单的问题,这似乎是如此令人费解。谁能帮忙?

最佳答案

原因是因为当你从abpopi索引时,所有的元素向左移动一次。您可以通过反向弹出项目来解决这个问题(因为索引应该按排序顺序排列):

for i in reversed(indexzeroes):
a.pop(i)
b.pop(i)

话虽如此,这对于大型列表(最坏情况 O(n^2))来说可能有些低效。你最好使用一个 set ,它会给你一个 O(n) 算法,但会消耗一些额外的内存:

indexzeroes = {i for i, j in enumerate(b) if j == 0}
a = [x for i, x in enumerate(a) if i not in indexzeros]
b = [x for i, x in enumerate(b) if i not in indexzeros]

关于python - 删除 python 列表中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34272141/

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