为什么追加到列表需要永远?

时间:2018-03-07 19:10:49

标签: python list python-os

我写了以下代码:

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时,它需要永远。

我到底在做什么?

1 个答案:

答案 0 :(得分:2)

追加永远。但是,搜索列表需要的时间越长,列表越长;而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)

社区Wiki,因为如果没有MCVE,我认为这个问题不在主题指南范围内;因此,不接受这个答案的代表/信用。