gpt4 book ai didi

python - list.remove() 方法未提供预期结果

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

在尝试从列表中删除所有不以特定子字符串开头的文件名时,我遇到了以下意外行为:

>>> allfiles = os.listdir(mydir)
>>> allfiles
['dwcpybyext.sh', 'dwlaunch', 'libupdate.sh', 'ntpsync.sh']
>>> for f in allfiles:
... if f.startswith('n') == False:
... allfiles.remove(f)
...
>>> allfiles
['dwlaunch', 'ntpsync.sh']

理论上,这应该从列表中删除每个 不以'n' 开头的文件名。相反,它在列表中留下一个以 'd' 开头的。如果我将循环更改为使用 if f.startswith('d') == False: 我会得到 ['dwcpybyext.sh', 'dwlaunch', 'ntpsync.sh'] -- 最后一项甚至不包含 'd' 字符。

为什么我会看到这种行为?这似乎不太可能是 Python 的 list.remove() 方法中的错误——如果我替换 del allfiles[allfiles.index(f)],而 .remove() 基本上只是一个别名。

最佳答案

在迭代列表的同时修改列表是一个非常糟糕的主意。尝试下一个:

allfiles = filter(lambda x: x.startswith('n'), allfiles)

关于python - list.remove() 方法未提供预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8745130/

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