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

Python-列表的两个列表的交集

詹甫
2023-03-14
问题内容

这个问题已经在这里有了答案

从列表列表中删除重复项 (12个答案)

4年前关闭。

这是我的两个清单。

k = [[1, 2], [4], [5, 6, 2], [1, 2], [3], [4], [5,9]]
kDash = [[1, 2], [4], [5, 6, 2], [1, 2], [3], [4], [5,6], [1,2]]

我的输出应为以下内容;

[[1, 2], [4], [5, 6, 2], [1, 2], [3], [4]]

如何获得此输出?

先感谢您


问题答案:

您将必须将列表转换为元组列表,然后使用交集。请注意,下面的解决方案可能具有不同顺序的元素,并且由于我使用的是set,因此显然不会存在重复项。

In [1]: l1 = [[1, 2], [4], [5, 6, 2], [1, 2], [3], [4], [5,9]]

In [2]: l2 = [[1, 2], [4], [5, 6, 2], [1, 2], [3], [4], [5,6], [1,2]]

In [3]: [list(x) for x in set(tuple(x) for x in l1).intersection(set(tuple(x) for x in l2))]
Out[3]: [[1, 2], [5, 6, 2], [3], [4]]

您也可以将交叉点保存在变量中并获取最终列表,如果需要排序,则需要重复:

In [4]: intersection = set(tuple(x) for x in l1).intersection(set(tuple(x) for x in l2))

In [5]: [x for x in l1 if tuple(x) in intersection]
Out[5]: [[1, 2], [4], [5, 6, 2], [1, 2], [3], [4]]

和交叉点,以防万一您感兴趣。

In [6]: print intersection
set([(1, 2), (5, 6, 2), (3,), (4,)])

这对于大型列表将非常有效,但是如果列表较小,请通过@timegb探索其他解决方案(对于较长的列表,其解决方案将是非常不理想的)



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

  • 问题内容: 我正在使用python进行游戏,并且能够得到两个列表的交集: 现在,如果一个列表包含和并包含第三个元素,是否有一个内置函数来查找内部所有三个列表的交集?例如 那么结果应该是 问题答案: 对于2.4,您只需定义一个交集函数。 对于较新版本的python: 相交方法接受任意数量的参数 或者,您可以将第一个集合与其自身相交,以避免切片列表并进行复制: 我不太确定哪种方法会更有效,并且感觉这将

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

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

  • 问题内容: 我有两个列表,例如: 如何创建这些列表的所有排列,如下所示: 我可以用吗? 问题答案:

  • 问题内容: 我试图根据某些条件并执行一些步骤来找到两个列表。在学习阶段找不到方法:) 如您所见,逻辑很简单 根据某个过滤器从订单中获取所有项目,并与另一个过滤器相交并做一些事情。 问题答案: 最简单的方法是这样的: