有没有Pythonic的方法来迭代两个列表的差异?

4

我的目标是遍历两个列表的差异。

我尝试了一个笨拙的代码来写 a - b,如下所示:

for i in a:
        if i in b:
            continue
        #statements

我想知道是否有更符合Python风格/更高效的做法。

3个回答

6
你可以使用“集合(sets)”来查看差异:

您可以使用集合(sets)来查看差异:

a = [1, 2, 3, 4, 5]
b = [2, 4, 6]

a = set(a)
b = set(b)

for i in a.difference(b):
    print(i)

# even supports the arithmetic syntax :D
for i in a - b:
    print(i)

2
比原来快得多 - sureshvv
写set(a)-set(b)会不会和原来一样?因为我在代码中还需要使用a和b作为列表。 - Blaine

1

就集合而言,属于a但不属于b的项目将构成集合差,因此这将是

for i in set(a).difference(b):
    # statements

0

你现在的写法已经很好了。如果你不喜欢使用 continue 语句,你可以使用生成器进行迭代:

for i in (x for x in a if x not in b):

虽然从可读性的角度来看,这可能更糟糕。


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