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

Python实现字符串字符按出现次数分组 解决列表重复值问题

问题原因

现有代码遍历字符串的所有字符,字符每出现一次就会往对应次数的列表中追加一次,因此出现n次的字符会被重复添加n次,最终导致列表出现重复元素。另外原有代码每次循环都会重复调用两次count方法,时间复杂度较高。

解决方案

方案1:推荐方案(效率更高)

先统计每个字符的出现次数,再反向构造目标字典,仅需遍历两次数据即可完成计算:

from collections import Counter

def build_count_dict(text):
    # 先统计每个字符的出现次数
    char_counter = Counter(text)
    result = {}
    for char, count in char_counter.items():
        if count not in result:
            result[count] = []
        result[count].append(char)
    return result

方案2:原有逻辑最小改动

如果不想引入内置模块,仅需在追加字符前判断其是否已经存在于对应列表中,不存在再追加即可:

def build_count_dict(text):
    letters = list(text)
    new_dict = {}
    for element in letters:
        # 提前保存次数,避免重复计算count
        cnt = letters.count(element)
        if cnt not in new_dict:
            new_dict[cnt] = [element]
        else:
            # 仅当字符不在列表中时才添加
            if element not in new_dict[cnt]:
                new_dict[cnt].append(element)
    return new_dict

两种方案输入"occurence"时,都可以得到预期输出:

{1: ['o', 'u', 'n'], 3: ['c'], 2: ['r', 'e']}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:06:04