gpt4 book ai didi

python - 为什么我的程序只删除列表中的所有其他字符?

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

所以,我不明白为什么我的输出返回 [1, 1, 3, 1, 3],而我想要并认为是 [1,1,1]。

the_list = [1, 2, 1, 2, 3, 1, 2, 3, 4]
target = 1

def keep(the_list, target):
index = 0
for x in the_list:
if x != target:
del the_list[index]
else:
pass

index += 1
print(the_list)

最佳答案

当您从特定索引处的列表中删除一个项目时,指定索引之后的所有项目都会向前移动 1,因为列表中不能有间隙,所以在您删除 2 在索引 1 处,例如,在下一次迭代中 x 将在索引 2 处变为 2曾经位于索引 3,因此您自己的 index 变量将指向错误的项目。

要就地从列表中删除项目,您应该改为从列表末尾倒数,以便在删除项目后重新索引列表不会影响 索引的准确性 计数器:

def keep(the_list, target):
index = len(the_list) - 1
while index >= 0:
if the_list[index] != target:
del the_list[index]
index -= 1

这样:

the_list = [1, 2, 1, 2, 3, 1, 2, 3, 4]
target = 1
keep(the_list, target)
print(the_list)

会输出:

[1, 1, 1]

但请记住,从列表中删除一个项目本质上是低效的,因为它的平均时间复杂度为 O(n),因为必须在给定索引之后移动项目,因此删除多个项目从列表中变得复杂的二次方。通过仅保留等于目标值的项目,使用列表推导式从旧列表构建新列表的效率要高得多。因此,即使上面的代码向您展示了如何正确地就地从列表中删除项目,您实际上也不应该在任何生产代码中使用它。

关于python - 为什么我的程序只删除列表中的所有其他字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52939783/

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