我知道如何得到两个平面列表的交集:
b1 = [1,2,3,4,5,9,11,15]
b2 = [4,5,6,7,8]
b3 = [val for val in b1 if val in b2]
或者
def intersect(a, b):
return list(set(a) & set(b))
print intersect(b1, b2)
但当我必须找到嵌套列表的交集时,我的问题就开始了:
c1 = [1, 6, 7, 10, 13, 28, 32, 41, 58, 63]
c2 = [[13, 17, 18, 21, 32], [7, 11, 13, 14, 28], [1, 5, 6, 8, 15, 16]]
最后我想得到:
c3 = [[13,32],[7,13,28],[1,6]]
你们能帮我一下吗?
如果需要:
下面是Python 2的解决方案:
在Python 3中,{}返回一个iterable而不是
list
,因此需要用list()
来包装filter
调用:说明:
filter部分获取每个子列表的项并检查它是否在源列表c1中。 对c2中的每个子列表执行列表理解。
对于只想找到两个列表交集的人,Asker提供了两种方法:
但是有一种混合方法更有效,因为您只需要在list/set之间进行一次转换,而不是三次转换:
这将在O(n)中运行,而他最初涉及列表理解的方法将在O(n^2)中运行
你不需要定义交集。这已经是一个一流的部分集。
相关问题 更多 >
编程相关推荐