gpt4 book ai didi

python - python中列表的减法,优化速度

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

为了在 python 中找出两个列表的替换,我使用:

names_of_files_not_dowloaded = [item for item in total_files if item not in names_of_files_downloaded]

它有效。

列表的大小是:

文件总数56373个元素

下载的文件列表 28464 个元素

它持续 34 秒。不知何故,我的直觉是 34 秒太长了。有什么方法可以更有效地进行减法?

谢谢

编辑:元素类似于“AB12345”

列表没有任何重复的元素,它们已经是集合了

最佳答案

只需将 files_downloaded 设为集合而不是列表即可。列表可能需要列表的完整迭代来进行成员资格检查,每次您想进行检查。然而,集合是 much more efficient to do a lookup on .

只需使用:

downloaded_set = set(files_downloaded)
list_of_files_not_dowloaded = [item for item in total_files if item not in downloaded_set]

将列表放入集合会产生初始成本,但之后的成员资格检查会快得多。


@juanpa.arrivillaga 在评论中还提到,造成性能下降的另一个原因是 in 对字符串进行相等性检查,而在使用 Sets 时会比较哈希值,而后者要便宜得多.

看起来,如果我正确阅读源代码,CPython's lists use a straight equality check to do comparisons when checking for membership .据推测,Sets 使用哈希,并且它们在 Set 创建时被缓存。

关于python - python中列表的减法,优化速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56247185/

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