当前位置: 首页 > 知识库问答 >
问题:

Python中两个列表的有序交叉

容鸿畴
2023-03-14

我知道在Python中,如果我有:

list_1 = [1,2,3]
list_2 = [2,3,4]

我可以做以下操作来找到两者之间的交集:

list(set(list_1) & set(list_2))
# = [2,3]

但这种方法有一个问题:集合不能像列表那样维持秩序。如果我真的有:

list_1 = [3,2,1]
list_2 = [2,3,4]

我得到:

list(set(list_1) & set(list_2))
# = [2,3]

即使我更喜欢从第一个列表的顺序,即。:

# = [3,2]

是否有其他交叉点技术可以将生成的“交叉点集”保持与第一个列表相同的顺序?

共有2个答案

鞠嘉志
2023-03-14

使用列表的索引方法作为排序标准:

l1 = [3, 2, 1]
l2 = [2, 3, 4]
sorted(set(l1) & set(l2), key = l1.index)

出:

[3, 2]
上官树
2023-03-14
set_2 = frozenset(list_2)
intersection = [x for x in list_1 if x in set_2]

set而不是frozenset也能工作,我只是越来越习惯于在不打算修改数据的情况下使用不可变的类。关键是为了保持顺序,您需要按照您想要维护的顺序遍历列表,但您不希望有天真方法的n*m复杂性:[x for x inlist_1如果x inlist_2]。检查set或类似的基于哈希的类型中的成员资格大约是O(1),相比之下,检查列表中的成员资格是O(n)。

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

  • 问题内容: 如果我有一个长长的清单:我分为两个清单: 我如何比较这两个列表以查看它们是否相等/相同,并约束它们必须具有相同的顺序? 我看到过一些问题,要求通过对两个列表进行排序来进行比较,但是在我的特定情况下,我不是要检查排序的比较,而是要检查相同的列表比较。 问题答案: 只需使用经典运算符: 如果相同索引处的元素相等,则列表相等。然后考虑订购。

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

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

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

  • null 但是,如果清单2为应该返回false(因为字符串d出现的顺序混乱)