如何比较两个元组对列表,找出二者共有的元素组合?
解决元组列表的无序匹配问题
给定两个元组对列表:
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
相关产品推荐
相关产品推荐

