如何统计列表中所有值相同的元素对,修正现有Python代码的计数问题
现有代码的逻辑是每匹配到一组相邻相等的元素就计数+1,会出现元素重复统计的问题,执行pairs([1, 1, 1, 1, 1])时返回结果为4,不符合常规的数值对统计规则。以下是两种常见需求对应的修改方案:
方案1:每个元素最多属于一个数值对(5个1返回2)
这是最常见的数值对统计规则,单个元素只能被使用一次。你可以直接统计每个数值的出现频次,每个数值可组成的对数为出现次数整除2,求和即可:
def pairs(lst): from collections import Counter count_map = Counter(lst) total = 0 for cnt in count_map.values(): total += cnt // 2 return total
如果要保留原有排序遍历的写法,可以修改为匹配到一对后直接跳过下一个元素,避免重复统计:
def pairs(lst): lst.sort() count = 0 x = 0 while x < len(lst) - 1: if lst[x] == lst[x+1]: count += 1 # 跳过已配对的元素 x += 2 else: x += 1 return count
方案2:统计所有两两相同的组合数(5个1返回10)
如果需求是只要两个元素取值相同就算一对,不限制元素重复使用(位置不同就算不同对),可以用组合数公式计算:
def pairs(lst): from collections import Counter count_map = Counter(lst) total = 0 for cnt in count_map.values(): total += cnt * (cnt - 1) // 2 return total
内容的提问来源于stack exchange,提问作者Fallseyy
相关产品推荐
相关产品推荐

