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

如何用Python列表推导式统计数字列表各首数字的出现次数?

用列表推导式统计列表中数字的首数字出现次数

嘿,我太懂这种感受了——列表推导式刚接触的时候确实比普通循环绕,尤其是找不到贴合初学者的例子,总觉得它是“看起来简洁但摸不着头脑”的语法糖!别担心,我来一步步帮你用列表推导式搞定这个需求,还会和你熟悉的常规循环对比,帮你理清思路。

首先,先快速回顾下你已经会的常规循环写法(方便对比):

my_list = [232, 379, 985, 384, 129, 197]
counts = {}
for num in my_list:
    # 提取首数字:转字符串取第一个字符,再转回整数
    first_digit = int(str(num)[0])
    # 更新计数
    counts[first_digit] = counts.get(first_digit, 0) + 1

# 生成结果语句
for digit, count in counts.items():
    print(f"有{count}个数字以{digit}开头。")

用列表推导式实现的步骤

列表推导式的核心是快速生成序列,所以我们可以把任务拆成两步:先提取所有首数字生成列表,再统计次数,最后生成结果语句——每一步都可以用简洁的写法完成:

1. 用列表推导式提取所有首数字

这一步是列表推导式最擅长的场景:遍历原列表,对每个元素做“提取首数字”的操作,直接生成新列表:

my_list = [232, 379, 985, 384, 129, 197]
# 列表推导式:逐个处理每个数字,提取首数字
first_digits = [int(str(num)[0]) for num in my_list]
# 输出:[2, 3, 9, 3, 1, 1]

2. 统计首数字的出现次数

统计次数属于聚合操作,单独用列表推导式做会比较繁琐(效率也不高),所以我们可以搭配Python内置的collections.Counter来高效完成——它专门用来统计可迭代对象中元素的出现次数:

from collections import Counter
counts = Counter(first_digits)
# 输出:Counter({3: 2, 1: 2, 2: 1, 9: 1})

如果不想导入模块,也可以用字典推导式(本质是列表推导式的变种,针对字典)来实现,不过效率会低一些(因为每次count()都会遍历整个列表):

counts = {digit: first_digits.count(digit) for digit in set(first_digits)}

3. 用列表推导式生成结果语句

最后,我们再用一次列表推导式,把统计结果转换成你需要的语句格式:

# 遍历counts的键值对,生成对应的字符串列表
result_statements = [f"有{count}个数字以{digit}开头。" for digit, count in counts.items()]

# 打印所有语句
for stmt in result_statements:
    print(stmt)

完整代码整合

把所有步骤合并起来,就是这样:

from collections import Counter

my_list = [232, 379, 985, 384, 129, 197]
first_digits = [int(str(num)[0]) for num in my_list]
counts = Counter(first_digits)
result_statements = [f"有{count}个数字以{digit}开头。" for digit, count in counts.items()]

for stmt in result_statements:
    print(stmt)

运行后会输出:

有2个数字以2开头。
有2个数字以3开头。
有1个数字以9开头。
有2个数字以1开头。

小提示

列表推导式的优势是简洁、高效地生成序列,但不是所有操作都适合硬套它。像统计次数这种聚合任务,搭配Counter是更合理的选择——既利用了列表推导式的简洁,又保证了代码的可读性和效率。

内容的提问来源于stack exchange,提问作者Shaken_not_stirred.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:16:54