列表中列表的交集

Ста*_*аев 0 python intersection list set python-3.x

任务是在2个列表中找到相等元素的数量,这些列表包含列表.我有两个看起来像的列表

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]]
Run Code Online (Sandbox Code Playgroud)

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

 count=sum(1 for k in DNF1 if k in DNF2)
Run Code Online (Sandbox Code Playgroud)

我该怎么写

func(DNF1,DNF2)
Run Code Online (Sandbox Code Playgroud)

将返回

[[28,32],[60,4]]
Run Code Online (Sandbox Code Playgroud)

或只是'2'(交叉点中的元素数量)

Dan*_*ejo 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)
Run Code Online (Sandbox Code Playgroud)

产量

[[60, 4], [28, 32]]
Run Code Online (Sandbox Code Playgroud)

想法是转换DNF1DNF2设置,但由于列表不可清除,您需要将它们转换为元组.一旦你有了DNF1DNF2as集合找到交集并转换回列出交集中的每个元素.这种方法的复杂性是O(n).