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

如何统计列表中所有值相同的元素对,修正现有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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:57:03