合并两个列表并删除重复项

4

我有一段代码,用以下代码加载了两个列表:

with open('blacklists.bls', 'r') as f:
            L = [dnsbls.strip() for dnsbls in f]
with open('ignore.bls', 'r') as f2:
            L2 = [ignbls.stip() for ignbls in f2]

dnsbls 包含以下内容:

list1
list2
list3

ignbls 包含

list2

我想做的是合并dnsbls和ignbls,然后删除任何出现超过一次的行,并打印那些带有“for”的行。我在思考类似于以下内容的东西:
for combinedlist in L3:
            print combinedlist

在上面的例子中,将打印出以下内容:
list1
list3

我尝试将dnsbls和ignbls的内容写入一个名为list.temp的文件中,然后打开该文件。但是在尝试删除出现多次的每一行时遇到了困难。 - MadsRC
当前项目中,顺序无关紧要,所以不需要考虑顺序。 - MadsRC
2个回答

2
你需要使用集合而不是列表:
L3 = list(set(L).difference(L2))

演示:
>>> L=['list1','list2','list3']
>>> L2=['list2']
>>> set(L).difference(L2)
set(['list1', 'list3'])
>>> list(set(L).difference(L2))
['list1', 'list3']

针对您的需求,您可能不需要再将其转换回列表,您可以很好地遍历生成的集合。

1
如果忽略列表比黑名单小(我认为这通常是情况),那么(未经测试):
with open('blacklists.bls') as bl, open('ignore.bls') as ig:
    bl_for = (line.strip() for line in bl if 'for' not in line)
    ig_for = (line.strip() for line in ig if 'for' not in line)
    res = set(ig_for).difference(bl_for)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接