当前位置: 首页 > 面试题库 >

Python-多个列表的交集?

曾泳
2023-03-14
问题内容

我正在使用python进行游戏,并且能够得到两个列表的交集:

result = set(a).intersection(b)

现在,如果d一个列表包含ab并包含第三个元素c,是否有一个内置函数来查找内部所有三个列表的交集d?例如

d = [[1,2,3,4], [2,3,4], [3,4,5,6,7]]

那么结果应该是

[3,4]

问题答案:

对于2.4,您只需定义一个交集函数。

def intersect(*d):
    sets = iter(map(set, d))
    result = sets.next()
    for s in sets:
        result = result.intersection(s)
    return result

对于较新版本的python:

相交方法接受任意数量的参数

result = set(d[0]).intersection(*d[:1])

或者,您可以将第一个集合与其自身相交,以避免切片列表并进行复制:

result = set(d[0]).intersection(*d)

我不太确定哪种方法会更有效,并且感觉这将取决于d[0]和列表的大小,除非python对它进行了内置检查

if s1 is s2:
    return s1

在交集法中。

>>> d = [[1,2,3,4], [2,3,4], [3,4,5,6,7]]
>>> set(d[0]).intersection(*d)
set([3, 4])
>>> set(d[0]).intersection(*d[1:])
set([3, 4])
>>>


 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 从列表列表中删除重复项 (12个答案) 4年前关闭。 这是我的两个清单。 我的输出应为以下内容; 如何获得此输出? 先感谢您 问题答案: 您将必须将列表转换为元组列表,然后使用交集。请注意,下面的解决方案可能具有不同顺序的元素,并且由于我使用的是set,因此显然不会存在重复项。 您也可以将交叉点保存在变量中并获取最终列表,如果需要排序,则需要重复: 和交

  • 问题内容: 在Python中,有没有一种好的方法来交错两个相同长度的列表? 说我被给和。我想把它们变成。 问题答案: 发布问题后,我意识到我可以简单地执行以下操作: 这两个列表在哪里和。 如果有N个列表要交织,则

  • 问题内容: 我知道如何得到两个平面列表的交集: 但是当我必须找到嵌套列表的交集时,我的问题就开始了: 最后,我希望收到: 你们能帮我这个忙吗? 问题答案: 如果你想: 然后这是你的Python 2解决方案: 在Python 3 返回一个迭代,而不是,所以你需要用filter与呼叫list(): 说明: 过滤器部分接受每个子列表的项目,并检查它是否在源列表c1中。对c2中的每个子列表执行列表推导。

  • 问题内容: 我有两个平面列表,其中一个包含重复值。例如, 我需要在array1中也找到array2中的值,并保留array1中的重复项。预期的结果将是 我想避免循环,因为实际数组将包含数百万个值。我尝试了各种布景和相交组合,但无法保留重复项。 任何帮助将不胜感激! 问题答案: 您是什么意思不想使用循环?您将不得不以一种或另一种方式对其进行迭代。只需单独放入每个项目,然后检查是否随身携带: 此外,根

  • 我知道在Python中,如果我有: 我可以做以下操作来找到两者之间的交集: 但这种方法有一个问题:集合不能像列表那样维持秩序。如果我真的有: 我得到: 即使我更喜欢从第一个列表的顺序,即。: 是否有其他交叉点技术可以将生成的“交叉点集”保持与第一个列表相同的顺序?

  • 问题内容: 我有一个这样的元组列表: 而且我需要将所有元组的交集合并起来。 那就是相交的元组是迭代地联合的。 我试图将元组转换为集合,然后采用交集,但没有用。任何想法? 问题答案: 这是网络问题,使用