描述

在一个无序的整数序列中,存在多个重复的数据(出现次数超过1次),用列表的形式将这些重复的数据从小到大输出。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
输入:若干个整数,以空格间隔‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
输出:从小到大排列,列表形式输出。如果没有找到重复的数,则输出空列表[]‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
本题部分用例有运算时间要求。

可以用列表结合集合来完成。先将列表转为集合,去掉重复的元素,再从列表中删除集合中的元素,用remove(i)时,每次只删除第一个找到的元素i,忽略其余相同元素。遍历结束后,列表中的元素都是重复存在的,但可能有元素在列表中存在多个,可再转集合重掉重复的元素。此时再转整型并排序,因此时列表元素很少,排序时间开销少。若一开始就先排序,因元素较多,时间开销会大一些。

  1. def duplicate(ls):
  2. data=set(ls) # 将列表转集合,去除重复元素
  3. for i in data: # 遍历集合中的元素
  4. ls.remove(i) # 从列表中删除集合中存在的一个元素,列表中剩余元素即重复元素
  5. return sorted(map(int,set(ls))) # 列表剩余元素再转集合去掉重复元素,再转整型,返回排序后的列表
  6. if __name__ == '__main__':
  7. ls = input().split() # 输入转列表
  8. print(duplicate(ls)) # 调用函数,输出返回值