gpt4 book ai didi

Python 循环缺少结果

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

我正在将一个包含大约 13,000 个名字的文件读取到一个列表中。

然后,我查看该列表中每个项目的每个字符,如果有匹配项,我将该行从 13,000 的列表中删除。

如果我运行一次,它会删除大约一半的列表。在第 11 次运行时,它似乎将其降低到 9%。为什么这个脚本缺少结果?为什么它会连续运行捕获它们?

使用 Python 3。

with open(fname) as f:
lines = f.read().splitlines()

bad_letters = ['B', 'C', 'F', 'G', 'H', 'J', 'L', 'O', 'P', 'Q', 'U', 'W', 'X']

def clean(callsigns, bad):
removeline = 0

for line in callsigns:
for character in line:
if character in bad:
removeline = 1
if removeline == 1:
lines.remove(line)
removeline = 0
return callsigns

for x in range (0, 11):
lines = clean(lines, bad_letters)

print (len(lines))

最佳答案

您正在更改(即变异)lines 数组,同时循环(即迭代)它。这绝不是一个好主意,因为这意味着您在阅读时正在更改某些内容,这会导致您跳过行而不是一开始就删除它们。

有很多方法可以解决这个问题。在下面的示例中,我们跟踪要删除的行,并在单独的循环中以某种方式删除它们,这样索引就不会改变。

with open(fname) as f:
lines = f.read().splitlines()

bad_letters = ['B', 'C', 'F', 'G', 'H', 'J', 'L', 'O', 'P', 'Q', 'U', 'W', 'X']

def clean(callsigns, bad):
removeline = 0
to_remove = []
for line_i, line in enumerate(callsigns):
for b in bad:
if b in line:
# We're removing this line, take note of it.
to_remove.append(line_i)
break
# Remove the lines in a second step. Reverse it so the indices don't change.
for r in reversed(to_remove):
del callsigns[r]

return callsigns

for x in range (0, 11):
lines = clean(lines, bad_letters)

关于Python 循环缺少结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49313609/

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