列表的交集

时间:2018-12-08 00:18:09

标签: python python-3.x list set intersection

任务是在包含列表的2个列表中查找相等元素的数量。 我有2个看起来像

的列表
new RTCPeerConnection({bundlePolicy: 'max-compat'});

此代码不起作用,因为参数是列表:

DNF1=[[4], [12], [20], [28,32], [36], [44], [52,54], [60,4],[60,24]]
DNF2=[[16], [20,60], [24], [28,32], [48], [52], [56,58], [60,4]]

我怎么写

 count=sum(1 for k in DNF1 if k in DNF2)

这将返回

func(DNF1,DNF2)

或只是'2'(相交的元素数量)

2 个答案:

答案 0 :(得分:5)

您可以执行以下操作:

DNF1 = [[4], [12], [20], [28, 32], [36], [44], [52, 54], [60, 4], [60, 24]]
DNF2 = [[16], [20, 60], [24], [28, 32], [48], [52], [56, 58], [60, 4]]


intersection = set(map(tuple, DNF1)) & set(map(tuple, DNF2))
result = [list(e) for e in intersection]
print(result)

输出

[[60, 4], [28, 32]]

这个想法是将DNF1DNF2转换为集合,但是由于列表不可散列,因此需要将它们转换为元组。将DNF1DNF2设置为集合后,找到交点并转换回以列出交点中的每个元素。这种方法的复杂性是 O(n)

答案 1 :(得分:2)

使用列表理解:

[DNF1[i] for i in range(len(DNF1)) if len(DNF1[i]) > 1 and DNF1[i] in DNF2 ]

[[28, 32], [60, 4]]