python - 如何找到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 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 中的集合算术的更多信息。干杯!
推荐阅读
- python - nginx下带有wsgi(uwsgi)的python是否有一些小的默认缓存?
- php - 发布具有相似名称和相似值的数组
- javascript - 如何在 bootsrap 4 上添加活动和删除现有活动类崩溃
- firebase - Firebase 数据库:如何更改列表项的值?
- html - 如何将两个按钮与各自的表单输入对齐?
- python - 文件未保存
- python-3.x - 从不同文件导入类时,导入语句在包含类的模块中中断
- node.js - 用户在手机上完成帐号关联后直接检索用户数据
- r - 带有模型约束的 R 中的逐步回归
- amazon-web-services - 使用 appsync 解析器、aws dymaodb 的嵌套查询