获取两个列表列表的交集或空列表

时间:2019-04-09 15:52:09

标签: python

我有两个形状相同的列表清单。

list1 = [[1,2,3], [], [4,5], []]
list2 = [[1,2], [7], [4,5], []]

我需要以下列表列表:

[[1,2], [], [4,5], []]

我如何得到它?

P.S .:这些主题对我没有帮助:

Python - Intersection of two lists of lists

Find intersection of two nested lists?

4 个答案:

答案 0 :(得分:5)

假设list1list2中的每个列表仅包含不同的元素,并且您不关心输出中元素的顺序,可以使用set交集来帮助您:< / p>

output = [list(set(l1) & set(l2)) for l1, l2 in zip(list1, list2)]

答案 1 :(得分:4)

浏览并使用集合:

list1 = [[1,2,3], [], [4,5], []]
list2 = [[1,2], [7], [4,5], []]

intersections = [list(set(s1)&set(s2)) for s1, s2 in zip(list1, list2)]

输出:

[[1, 2], [], [4, 5], []]

答案 2 :(得分:4)

通过短列表的索引获取每个子列表。

[list(set(list1[x]) & set(list2[x])) for x in range(min(len(list1), len(list2)))]
# [[1, 2], [], [4, 5], []]

这将导致列表的长度与最短输入的长度相同。

答案 3 :(得分:0)

在这里:

list1 = [[1,2,3], [], [4,5], []]
list2 = [[1,2], [7], [4,5], []]
new_list = []

for i in range(len(list1)):
    inter = [x for x in list1[i] if x in list2[i]]
    new_list.append(inter)

print(new_list)

输出:

[[1, 2], [], [4, 5], []]