描述
在一个无序的整数序列中,存在多个重复的数据(出现次数超过1次),用列表的形式将这些重复的数据从小到大输出。
输入:若干个整数,以空格间隔
输出:从小到大排列,列表形式输出。如果没有找到重复的数,则输出空列表[]
本题部分用例有运算时间要求。
可以用列表结合集合来完成。先将列表转为集合,去掉重复的元素,再从列表中删除集合中的元素,用remove(i)时,每次只删除第一个找到的元素i,忽略其余相同元素。遍历结束后,列表中的元素都是重复存在的,但可能有元素在列表中存在多个,可再转集合重掉重复的元素。此时再转整型并排序,因此时列表元素很少,排序时间开销少。若一开始就先排序,因元素较多,时间开销会大一些。
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)) # 调用函数,输出返回值