如何检查一个列表中的对象是否在另一个嵌套列表中?

时间:2017-12-04 20:41:05

标签: python python-3.x

说我有一个这样的嵌套列表,例如:

List = [['a','d','b'],['a','x','w','t','d'],['g','c','d','z']]

我想要做的是在列表中找到所有较小列表共享的对象,因此对于示例列表,我给出了' d'将是他们共享的对象。

这是我到目前为止所做的事情:

def related(List):
    for item in List[0]:
      for i in range(1, len(List)):
        if item in List[i]:
            return item

我遇到的问题是当我这样做时:

related([['a','d','b'],['a','x','w','t','d'],['g','c','d','z']])

'一个'退回,但这不是正确答案,因为' a'不在所有列表中,只在前2个列表中。该列表的正确答案应该是'

我的功能基本上只是在一个列表中找到相同的对象时停止运行。

有人能够让我走上正确的道路,我可以做些什么来让我的代码正常工作?谢谢!!!

1 个答案:

答案 0 :(得分:3)

您在这里寻找的是这些列表的交集。 Python列表没有内置的交集功能,但是set可以。我们可以做到

def in_common(l):
    if not l:
        return set()
    return set(l[0]).intersection(*l[1:])

这将第一个元素转换为set,然后找到该集合与列表中其余元素的交集。

in_common([['a','d','b'],['a','x','w','t','d'],['g','c','d','z']])

返回

{'d'}

包含set

'd'