如何找出字符串中出现频率最低的所有字符
解决打印字符串中所有最低频率字符的问题
问题说明
需要实现打印字符串中所有出现频率最低的字符,但现有代码仅能输出一个最低频率的字符,无法满足需求。
示例输入
aabbccdddeeeffff
期望输出
Least occuring character : a,b,c repeated 2 time(s) -------------------------- Character Frequency -------------------------- a 2 b 2 c 2 d 3 e 3 f 4
实际输出
Least occurring character is: a It is repeated 2 time(s) -------------------------- Character Frequency -------------------------- a 2 b 2 c 2 d 3 e 3 f 4
现有代码
# Get string from user string = input("Enter some text: ") # Set frequency as empty dictionary frequency_dict = {} tab="\t\t\t\t\t" for character in string: if character in frequency_dict: frequency_dict[character] += 1 else: frequency_dict[character] = 1 least_occurring = min(frequency_dict, key=frequency_dict.get) # Displaying result print("\nLeast occuring character is: ", least_occurring) print("Repeated %d time(s)" %(frequency_dict[least_occurring])) # Displaying result print("\n--------------------------") print("Character\tFrequency") print("--------------------------") for character, frequency in frequency_dict.items(): print(f"{character + tab + str(frequency)}")
修改后的代码
# Get string from user string = input("Enter some text: ") # Set frequency as empty dictionary frequency_dict = {} for character in string: frequency_dict[character] = frequency_dict.get(character, 0) + 1 # 先获取最低频率值 min_frequency = min(frequency_dict.values()) # 筛选出所有频率等于最低值的字符 least_occurring_chars = [char for char, count in frequency_dict.items() if count == min_frequency] # Displaying result print(f"\nLeast occuring character : {', '.join(least_occurring_chars)}") print(f"repeated {min_frequency} time(s)") # Displaying frequency table print("\n--------------------------") print("Character Frequency") print("--------------------------") for character, frequency in frequency_dict.items(): # 使用格式化对齐让输出更整齐 print(f"{character:<15}{frequency}")
关键修改点
- 获取最低频率值:不再直接用
min()取单个字符,而是先通过min(frequency_dict.values())拿到所有字符中的最低出现次数。 - 筛选所有低频率字符:用列表推导式遍历字典,把所有频率等于最低值的字符收集起来。
- 输出格式优化:用
,.join()把收集到的字符拼接成逗号分隔的字符串;同时替换原有的多tab,用f"{character:<15}"实现左对齐,让频率表更整齐。 - 简化频率统计:用
frequency_dict.get(character, 0) + 1替代原有的if-else判断,代码更简洁。
内容的提问来源于stack exchange,提问作者mo1010
相关产品推荐
相关产品推荐

