列表与列表的交集
Intersection of lists from lists
任务是在 2 个包含列表的列表中找到相等元素的数量。
我有 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]]
此代码不起作用,因为参数是列表:
count=sum(1 for k in DNF1 if k in DNF2)
怎么写
func(DNF1,DNF2)
这将 return
[[28,32],[60,4]]
或者只是“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]]
intersection = set(map(tuple, DNF1)) & set(map(tuple, DNF2))
result = [list(e) for e in intersection]
print(result)
输出
[[60, 4], [28, 32]]
想法是将 DNF1
和 DNF2
转换为集合,但由于列表不可散列,因此您需要将它们转换为元组。一旦你有 DNF1
和 DNF2
作为集合找到交集并转换回列出交集中的每个元素。这种方法的复杂度是O(n).
使用列表理解:
[DNF1[i] for i in range(len(DNF1)) if len(DNF1[i]) > 1 and DNF1[i] in DNF2 ]
[[28, 32], [60, 4]]
任务是在 2 个包含列表的列表中找到相等元素的数量。 我有 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]]
此代码不起作用,因为参数是列表:
count=sum(1 for k in DNF1 if k in DNF2)
怎么写
func(DNF1,DNF2)
这将 return
[[28,32],[60,4]]
或者只是“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]]
intersection = set(map(tuple, DNF1)) & set(map(tuple, DNF2))
result = [list(e) for e in intersection]
print(result)
输出
[[60, 4], [28, 32]]
想法是将 DNF1
和 DNF2
转换为集合,但由于列表不可散列,因此您需要将它们转换为元组。一旦你有 DNF1
和 DNF2
作为集合找到交集并转换回列出交集中的每个元素。这种方法的复杂度是O(n).
使用列表理解:
[DNF1[i] for i in range(len(DNF1)) if len(DNF1[i]) > 1 and DNF1[i] in DNF2 ]
[[28, 32], [60, 4]]