描述
在一个无序的整数序列中,存在多个重复的数据(出现次数超过1次),用列表的形式将这些重复的数据从小到大输出。
输入:若干个整数,以空格间隔
输出:从小到大排列,列表形式输出。如果没有找到重复的数,则输出空列表[]
输入:若干个整数,以空格间隔
ls = input().split() # 输入转列表,元素为字符串
用 set(ls) 去掉列表 ls 中重复的数据,得到集合。再遍历集合,将集合中存在的数据从列表中删除。注意,remove(i) 只删除第一个与i 相同的数据,有多次重复的仍然保留在列表中。遍历结束后可以再用 set(ls) 转集合去掉重复的元素。
data = set(ls) # 去掉重复数据,集合
for i in data: # 遍历集合
ls.remove(i) # 将集合中存在的数据从列表中删除
print(sorted(map(int,set(ls)))) # 列表剩余元素就是重复的数据,再次转集合去重,转整型,再排序,结果为列表
完整代码如下:
def duplicate(ls):
data=set(ls) # 去掉重复数据,集合
for i in data: # 遍历集合
ls.remove(i) # 将集合中存在的数据从列表中删除
return sorted(map(int,set(ls))) # 列表剩余元素就是重复的数据,再次转集合去重,转整型,再排序,结果为列表
if __name__ == '__main__':
ls = input().split() # 输入数据转列表,元素为字符串
print(duplicate(ls)) # 调用函数
当数据量较大时,列表的效率是较低的,所以在数据量很大时,要尽量减少使用列表。这个题目也可以先建立 两个空集合,然后遍历列表,将重复出现的数据放在一个集合中,再排序输出。
def duplicate(ls):
duplication = set() # 存放重复元素的集合
data=set() # 存放只出现一次的集合
for i in ls: # 遍历列表
if i in data: # 如果元素在只出现一次的集合中已经存在,说明是重复数据
duplication.add(i) # 加入到重复数据的集合中,多次重复的只保留一次
else:
data.add(i)
return sorted(map(int,duplication)) # 集合元素转整型,再排序,结果为列表
if __name__ == '__main__':
ls = input().split() # 输入数据转列表,元素为字符串
print(duplicate(ls)) # 调用函数