Вы преуспели в использовании набора first
, поскольку он имеет временную сложность O (1) для операции in
. Но с другой стороны, вы используете список для second
, который превращает эту функцию в O (N ^ 2) и, в худшем случае, вы дважды просматриваете список second
.
Итак, я рекомендую вам использовать словарь для хранения найденных вами чисел.
Например:
def duplicates(L):
first = dict()
second=[]
for i in L:
if i not in first: #First time the number appears
first[i] = False
elif not first[i]: #Number not on the second list
second.append(i)
first[i]=True
return second
Обратите внимание, что я использовал логическое значение для значения ключа словаря для представляет, появляется ли число более 1 раза или нет (или оно уже было добавлено в список de second
). Это решение имеет O (N) временную сложность, что означает, что это намного быстрее.