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

Python入门:统计指定范围内数字中各数位的出现次数

问题分析与解决:统计数位出现次数

问题需求

统计指定范围(start到finish)内所有数字中,0-9每个数位的出现次数,返回各数位对应次数的列表(注意:不是统计列表元素数量,也不是查找列表元素的子字符串匹配)。

你的代码问题所在

你当前代码的核心错误出在这一行:

counteddigits = [housenumbers.count(digit) for digit in digitstocount]

housenumbers是存储着每个数字字符串的列表(比如['125', '126']),list.count(digit)的作用是统计列表中完全等于digit的元素个数。例如你要统计'1'的次数,列表里没有元素是单独的'1',都是三位数的字符串,所以所有计数都返回0,这就是输出全0的原因。

你需要的是统计所有数字字符串中每个字符的出现次数,而非列表元素的匹配次数。

修正方案

这里提供两种直观的修正思路:

方案1:拼接成大字符串后统计

把范围内所有数字转换成字符串并拼接成一个完整的长字符串,再直接统计每个数位在长字符串中的出现次数:

def paint_letterboxes(start, finish):
    digitstocount = '0123456789'
    # 生成所有数字的字符串列表(保留你原来的打印需求)
    housenumbers = [str(num) for num in range(start, finish + 1)]
    print(housenumbers)
    # 拼接所有数字为一个大字符串
    all_digits = ''.join(housenumbers)
    # 统计每个数位的出现次数
    counteddigits = [all_digits.count(d) for d in digitstocount]
    print(counteddigits)

paint_letterboxes(125,132)

方案2:逐个遍历数位累加计数

初始化一个长度为10的计数列表(对应0-9),遍历每个数字的每一位,逐个累加对应数位的计数:

def paint_letterboxes(start, finish):
    # 初始化0-9的计数,初始值都为0
    counts = [0] * 10
    housenumbers = []
    for num in range(start, finish + 1):
        num_str = str(num)
        housenumbers.append(num_str)
        # 遍历当前数字的每一位字符
        for digit_char in num_str:
            # 将字符转为整数作为索引,对应计数加1
            digit = int(digit_char)
            counts[digit] += 1
    print(housenumbers)
    print(counts)

paint_letterboxes(125,132)

验证结果

运行上述任意一种代码,都会得到你预期的输出:

['125', '126', '127', '128', '129', '130', '131', '132']
[1,9,6,3,0,1,1,1,1,1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:35:30