找到两个嵌套列表的交集? [英] Find intersection of two nested lists?

查看:41
本文介绍了找到两个嵌套列表的交集?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道如何获得两个平面列表的交集:

I know how to get an intersection of two flat lists:

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)

但是当我必须找到嵌套列表的交集时,我的问题就开始了:

But when I have to find intersection for nested lists then my problems starts:

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]]

你们能帮我处理一下吗?

Can you guys give me a hand with this?

推荐答案

如果你想要:

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 解决方案:

c3 = [filter(lambda x: x in c1, sublist) for sublist in c2]

在 Python 3 中 filter 返回一个可迭代对象而不是 list,所以你需要用 list 包装 filter 调用():

In Python 3 filter returns an iterable instead of list, so you need to wrap filter calls with list():

c3 = [list(filter(lambda x: x in c1, sublist)) for sublist in c2]

说明:

过滤器部分获取每个子列表的项目并检查它是否在源列表 c1 中.对 c2 中的每个子列表执行列表理解.

The filter part takes each sublist's item and checks to see if it is in the source list c1. The list comprehension is executed for each sublist in c2.

这篇关于找到两个嵌套列表的交集?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆