Вопросы по оптимизации и «самые быстрые» имеют много переменных, поэтому вы должны всегда профилировать их своими данными в тех же условиях, в которых вы ожидаете, что код будет работать. Рассмотрим следующий код:
import timeit
import random
import functools
def remove_duplicates_manual(input_list):
result = []
k = -1 # to store the index of current element being checked
for i in input_list:
k += 1
flag = False
for j in range(0,k,+1):
if(input_list[j] == i):
flag = True
if(flag==False):
result.append(i)
else:
continue
return result
def remove_duplicates_set(input_list):
return list(set(input_list))
l = [random.randint(0, 10) for x in xrange(1000)]
rd_manual = functools.partial(remove_duplicates_manual, l)
rd_set = functools.partial(remove_duplicates_set, l)
print(timeit.timeit(rd_manual, number=100))
print(timeit.timeit(rd_set, number=100))
Этот код производит этот выход:
3,648878
0,001779
Таким образом, мы можем заключить, что метод set
обычно будет быстрее дано список случайных целых чисел в диапазоне 0-10, но он может различаться для ваших данных и вашей системы. Кроме того, как упоминалось в комментариях и других ответах, есть также много способов, которыми вы могли бы настроить свой ручной алгоритм, чтобы сделать его быстрее.
Кроме того, вы должны отметить, что метод set
может быть невозможен даже для некоторых данных.Наборы Python требуют хешируемых типов данных (так же, как словарные ключи), поэтому, если вы сортируете список изменяемых типов данных (например, другие списки), вы не сможете использовать list(set(input_list))
.
Список отсортирован? – rlms
Вы можете ** отсортировать ** свои значения перед выполнением этой функции, а затем удалить дубликаты в строке. –
http://stackoverflow.com/questions/1532819/algorithm-efficient-way-to-remove-duplicate-integers-from-an-array – ComputerFellow