查找列表的任何元素是否在另一个列表中

时间:2014-07-10 03:16:54

标签: python list

我有一个主列表A和辅助列表BA包含B的所有元素,还包含其他元素。我想确定AB值。例如:

A = ['two', 'roads', 'diverged', 'in', 'a']
B = ['roads', 'in']

我想要的是:

['two', 'diverged', 'a']

如果B只包含一个元素,比如roads,我可以采取以下措施:

for i in range(0, len(A)):
    if 'roads' not in A[i]:
        print A[i]

但是如果B有多个元素,我就会陷入困境。我找到了any()函数,但不确定为什么这不起作用:

for i in range(0, len(A)):
    if any(B) not in A[i]:
        print A[i]

(我看了一些其他的答案,但找不到我要找的东西。这可能在其他地方被问过。如果是这样的话,请原谅我两次问。)

3 个答案:

答案 0 :(得分:5)

[item for item in a if item not in b]

你也可以通过set(a) - set(b)来使用套装,但我相信这会稍微慢些。此外,使用集合还会删除结果中的重复值,这可能是您想要的,也可能不是。

答案 1 :(得分:4)

尝试列表理解:

[x for x in A if x not in B]

答案 2 :(得分:1)

虽然接受的答案对于许多目的来说肯定是最好的,但其算法复杂度为O(N×M),其中N和M是AB的长度。在大多数情况下(即AB不会过长)这无关紧要。 但是,如果您打算处理很长的列表,首先会将B转换为frozen set来改善处理时间:

tmp = frozenset(B)
[i for i in A if i not in tmp]

由此产生的复杂性为O(N + M)。