我有一个主列表A
和辅助列表B
。 A
包含B
的所有元素,还包含其他元素。我想确定A
中不的B
值。例如:
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]
(我看了一些其他的答案,但找不到我要找的东西。这可能在其他地方被问过。如果是这样的话,请原谅我两次问。)
答案 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是A
和B
的长度。在大多数情况下(即A
和B
不会过长)这无关紧要。
但是,如果您打算处理很长的列表,首先会将B
转换为frozen set来改善处理时间:
tmp = frozenset(B)
[i for i in A if i not in tmp]
由此产生的复杂性为O(N + M)。