如何使用字典分离列表中的重复值与唯一值?
分离列表中的重复与唯一数字
问题背景
我需要把列表里的重复数字和唯一数字分开,有人建议用字典实现,但我只会用字典去重,后续步骤摸不清;另外也没法输出成指定的格式。
输入示例:
2 16 25 2 49 75 49 49
期望输出示例:
Non-duplicates: 16 25 75 Duplicates: 2 49
我尝试的代码:
# duplicate_values = [] # unique_values = [] for x in lst: if lst.count(x) == 1: unique_values.append(x) elif x not in duplicate_values: duplicate_values.append(x)
解决方案
现有代码的问题
你的代码逻辑能实现需求,但lst.count(x)每次都会完整遍历列表统计次数,列表元素多的时候效率会很低。另外如果没提前初始化duplicate_values和unique_values两个列表,运行直接会报错。
用字典实现的正确方式
字典的核心作用是快速统计每个数字的出现次数——用数字做键,出现次数做值。具体步骤如下:
- 读取所有输入,转换成整数列表;
- 遍历列表,用字典统计每个数字的出现次数;
- 根据次数把数字分到唯一列表和重复列表;
- 按指定格式输出结果。
完整可运行代码:
# 读取输入,直到无输入或结束 num_list = [] while True: try: input_str = input().strip() if not input_str: break num_list.append(int(input_str)) except EOFError: break # 统计每个数字的出现次数 count_map = {} for num in num_list: count_map[num] = count_map.get(num, 0) + 1 # 分离唯一值和重复值 non_duplicates = [] duplicates = [] for num, count in count_map.items(): if count == 1: non_duplicates.append(num) else: duplicates.append(num) # 按要求格式输出 print("Non-duplicates:") for num in non_duplicates: print(num) print() print("Duplicates:") for num in duplicates: print(num)
代码说明
- 输入处理:循环读取每一行输入,去掉空白后转成整数存入列表,遇到空行或输入结束时停止;
- 字典统计:用
count_map.get(num, 0)可以简化代码——如果数字不在字典里,默认取0再加1,不用写if-else判断; - 输出格式:严格按照示例要求,先打印唯一值标题,再逐个打印唯一值,空行后打印重复值标题和重复值。
内容的提问来源于stack exchange,提问作者user21597250
相关产品推荐
相关产品推荐

