首页 > 解决方案 > Python3比较两个列表并找到通配符匹配

问题描述

list A: ['abc.txt', '123.txt', 'apple.jpg']

list B: ['ab', '123']

我想生成一个新列表 A,其中仅包含列表 B 中未包含通配符匹配的列表。想法输出将是:

list C: ['apple.jpg']

这是我的代码:

lista=['abc.txt', 'happy.txt', 'apple.jpg']
listb=['happy', 'ab']
listc=lista

for a in lista:
    for b in listb:
        print(a + ": " + b)
        if b in a:
            listc.remove(a)

print(listc)

我的代码的输出是:

abc.txt: happy
abc.txt: ab
apple.jpg: happy
apple.jpg: ab
['happy.txt', 'apple.jpg']

有谁知道哪里出错了?而且,有什么更好的方法吗?谢了。

标签: python

解决方案


赋值后,listc=lista两个变量都引用同一个列表。结果,您修改了您迭代的列表,这会导致不良的副作用。您应该复制原始列表:listc=lista.copy()

这是针对您的问题的更好的基于正则表达式的解决方案:

import re
pattern = re.compile('|'.join(listb)) # Anything ON the listb
# re.compile('happy|ab')
listc = [a for a in lista if not pattern.match(a)]
# ['apple.jpg']

推荐阅读