首页 > 解决方案 > 如何找到python列表之间匹配值对的数量?

问题描述

我试图找出最干净的方法来找出两个列表之间有多少匹配对。两个列表之间的顺序无关紧要

编辑我的意思是列出对的顺序无关紧要,但 [[1,2]] 和 [[2,1]] 不一样。此外,每一对都是唯一的,不会找到重复项。这些对用于跟踪状态空间中相邻节点之间的关系,因此每个关系的顺序很重要。我删除了 a & b 的长度无关紧要的声明。在这种情况下,它们将始终相同。目标是我有一个按特定顺序堆叠块的状态空间,我需要将该顺序更改为给定的结果。为了验证我的逻辑,比较当前状态空间中的布局与目标布局之间的关系非常重要。为此,我想创建一个所有关系的列表(即块 1 到 2、块 2 到 3 等。

IE

a = [[1,1], [1,2], [1,3], [2,1]]
b = [[1,1], [3,3], [2,1], [4,2]]

matches = 2

标签: python

解决方案


在这些情况下,Python 中的集合算术对于快速、易于阅读的代码很有用。由于 Python List 对象不可散列,因此它们不能是集合成员。然而,元组可以是集合成员。因此,要在此处使用集合算术,您首先需要将对转换为元组。尝试以下操作:

from typing import Set, List


def to_set_of_tuples(li: List[list]) -> Set[tuple]:
    return set(map(tuple, li))


def get_num_matching_pairs(li0: List[list], li1: List[list]) -> int:
    matching_pairs: Set[tuple] = to_set_of_tuples(a) & to_set_of_tuples(b)
    num_matching_pairs: int = len(matching_pairs)
    return num_matching_pairs


a = [[1,1], [1,2], [1,3], [2,1]]
b = [[1,1], [3,3], [2,1]]
assert 2 == get_num_matching_pairs(a, b)

您可以在此处阅读有关 Python 中的集合算术的更多信息。干杯!


推荐阅读