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

Python列表首元素匹配:按索引奇偶统计符合条件的对数

问题解决:统计符合规则的首数位数字对

我来帮你搞定这个问题!先梳理下你原代码里的几个问题,再给你一个简洁高效的解决方案:

原代码的问题点

  • 重复计数:嵌套循环中i和j的范围会导致同一对数字被统计两次(比如i=0,j=2和i=2,j=0都会触发计数),结果会翻倍
  • 条件判断语法错误:(i,j%2==0 or i,j%2==1) 写法不符合Python语法,正确的判断应该是i % 2 == j % 2(确保两个索引同奇偶)
  • 未处理最大对数限制:没有实现“同一首数位最多只能组成2对”的规则
  • 冗余操作:不需要将字符串拆分为子列表,直接取每个字符串的第一个字符即可完成判断

简洁解决方案

核心思路是:先按索引奇偶性拆分两组,分别统计每组内首数位的出现次数,再根据规则计算每组的有效对数,最后求和。

代码实现

test_list = ['58','12','50','17']
pair = 0

# 将原列表按索引奇偶性拆分为两组
even_index_group = [s[0] for idx, s in enumerate(test_list) if idx % 2 == 0]
odd_index_group = [s[0] for idx, s in enumerate(test_list) if idx % 2 == 1]

# 定义函数计算单组内的有效对数
def calculate_valid_pairs(group):
    from collections import Counter
    digit_counts = Counter(group)
    group_pairs = 0
    for digit, count in digit_counts.items():
        # 计算该数位能组成的对数,最多取2对
        possible_pairs = count * (count - 1) // 2  # n个元素的组合数公式
        group_pairs += min(possible_pairs, 2)
    return group_pairs

# 累加两组的有效对数
pair += calculate_valid_pairs(even_index_group)
pair += calculate_valid_pairs(odd_index_group)

print(pair)  # 输出结果:2

代码说明

  1. 分组处理:使用enumerate获取每个元素的索引,将偶数索引和奇数索引的元素拆分到两个独立组,确保只统计同奇偶索引的数字对
  2. 计数统计:用collections.Counter快速统计每组内每个首数位的出现次数
  3. 规则适配:对每个数位的出现次数,先计算理论上能组成的对数(组合数公式),再取该值与2的最小值,满足“同一首数位最多2对”的限制
  4. 结果求和:将两组的有效对数相加,得到最终的pair值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:42:53