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

Python中按字母出现次数过滤计数结果的简洁实现方案

如何过滤字母计数结果中出现次数≥3的项?

我的现有代码与结果

我目前用这段代码统计单词中各字母的出现次数:

mylist = list("asmoranomardicadaistinaculdacar")
[[x,mylist.count(x)] for x in set(mylist)]

执行后得到的结果是:

[['n', 2], ['r', 3], ['u', 1], ['m', 2], ['t', 1], ['a', 8], ['l', 1], ['s', 2], ['o', 2], ['i', 3], ['c', 3], ['d', 3]]

我的需求

我希望仅保留出现次数大于等于3的字母计数项,并且想找到简洁的一行代码实现方案,目前自己的Python能力还不足以写出最优解,求指导。


解决方案

其实你只需要在原列表推导式里加一个条件判断,就能实现一行代码过滤:

[[x, mylist.count(x)] for x in set(mylist) if mylist.count(x) >= 3]

不过上面的写法会重复调用count()(生成元素和判断条件各一次),如果字符串很长的话效率稍低。你也可以先生成完整的计数列表,再过滤,同样是一行:

filtered = [item for item in [[x, mylist.count(x)] for x in set(mylist)] if item[1] >= 3]

更推荐的是用Python内置的collections.Counter,它专门做计数统计,只需要遍历一次字符串就能完成计数,代码更清晰且性能更好,同样可以写成简洁的形式:

from collections import Counter

filtered = [[char, cnt] for char, cnt in Counter("asmoranomardicadaistinaculdacar").items() if cnt >= 3]

执行后得到的目标结果是:

[['r', 3], ['a', 8], ['i', 3], ['c', 3], ['d', 3]]

补充说明

  • 第一种列表推导式写法最直接,适合快速实现,但数据量大时存在重复遍历的性能损耗;
  • 第二种写法先完成所有计数再过滤,避免了重复调用count();
  • Counter是最优方案,不仅效率更高,代码可读性也更强,日常处理计数类问题都可以优先考虑它。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:32:45