You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何比较两个元组对列表,找出二者共有的元素组合?

解决元组列表的无序匹配问题

给定两个元组对列表:

pairs1 = [('egg','dog'),('apple','banana'),('orange','chocolate'),('elephant','gargoyle'),('cat','lizard')]
pairs2 = [('cat','lizard'),('ice','hamster'),('elephant','giraffe'),('apple','gargoyle'),('dog','egg')]

需要找出两个列表中共有的元组组合,且元组内元素顺序不影响匹配结果(比如('egg','dog')和('dog','egg')视为同一组合)。

解决方案思路

核心是忽略元组内元素的顺序,将每个元组转换为可哈希的无序标识,这里选择把元组排序后转为新元组(排序后的元组能唯一标识无序元素组合,且可存入集合进行交集运算)。

实现代码

pairs1 = [('egg','dog'),('apple','banana'),('orange','chocolate'),('elephant','gargoyle'),('cat','lizard')]
pairs2 = [('cat','lizard'),('ice','hamster'),('elephant','giraffe'),('apple','gargoyle'),('dog','egg')]

# 生成每个元组的排序标识集合
processed_pairs1 = set(tuple(sorted(pair)) for pair in pairs1)
processed_pairs2 = set(tuple(sorted(pair)) for pair in pairs2)

# 找出共有组合的排序标识,再从原列表中匹配对应元组
common_pairs = [pair for pair in pairs1 if tuple(sorted(pair)) in processed_pairs2]

print(common_pairs)

运行结果

输出:

[('egg', 'dog'), ('cat', 'lizard')]

完全符合需求中的预期结果。

内容的提问来源于stack exchange,提问作者BanAckerman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 12:15:41