将列表列表与另一个列表进行比较,然后返回常用列表

EAl*_*ado 4 python list python-3.x

假设我有以下列表清单:

list1 = [[A,B],[C,D],[E, F]]
list2 = [A, B, F]
Run Code Online (Sandbox Code Playgroud)

我想要一个函数返回与第一个相关的公共列表.这个例子的期望结果是:

result = [[A,B],[],[F]]
Run Code Online (Sandbox Code Playgroud)

我已经尝试迭代list1的每个元素,并通过与list2进行比较,创建一个附加每个元素的新数组.我知道如何迭代列表列表,但我找不到为"结果"创建列表列表的方法.

列表不大,大约有5个元素.项目有可能重复,但整个列表中列表中的顺序并不重要.

Ama*_*dan 6

使用集算术,非常简单快捷:

set2 = set(list2)
[list(set(e) & set2) for e in list1]
Run Code Online (Sandbox Code Playgroud)

如果列表可以包含非唯一项目,那么......让我们使用计数器!

from collections import Counter
counter2 = Counter(list2)
[list((Counter(e) & counter2).elements()) for e in list1]
Run Code Online (Sandbox Code Playgroud)


Rak*_*esh 5

这是一种方法.运用list comprehension

例如:

list1 = [["A","B"],["C","D"],["E", "F"]]
list2 = ["A", "B", "F"]

result = [[j for j in i if j in list2] for i in list1]
print(result)
Run Code Online (Sandbox Code Playgroud)

输出:

[['A', 'B'], [], ['F']]
Run Code Online (Sandbox Code Playgroud)