为什么追加到列表需要很长时间?



我写了以下代码:

import fnmatch
ll = []
for items in src:
for file in os.listdir('/Users/swaghccc/Downloads/PulledImages/'):
if fnmatch.fnmatch(file, items.split('/')[-1]):
print file
ll.append(file)

我的src列表包含图像的路径。 像这样:

/path/to/image.jpg

这些映像是目录PulledImages中包含的映像的子集。

匹配图像的打印工作正常。 但是当我尝试将这些图像名称放入列表中时ll需要很长时间。

我到底做错了什么?

追加不会永远。但是,列表越长,搜索列表需要更多时间;和os.listdir(),作为操作系统调用,在针对大目录运行时不可避免地会变慢。

为了避免这种情况,请使用字典或集合,而不是列表,来跟踪要比较的名称 - 并且只在循环之外构建一次该集合。

# run os.listdir only once, storing results in a set for constant-time lookup
import sets
files = sets.Set(os.listdir('/Users/swaghccc/Downloads/PulledImages/'))
ll = []
for item in src:
if item.split('/')[-1] in files:
ll.append(file)

社区维基,因为我认为这个问题在没有 MCVE 的情况下不在主题指南范围内; 因此,不为这个答案获得代表/荣誉。

最新更新