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
相关产品推荐
相关产品推荐

