Если у меня есть список python, у которого много дубликатов, и я хочу перебирать каждый элемент, но не через дубликаты, лучше использовать набор (как в set(mylist)
, либо найти другой способ создания списка без дубликатов? Я думал просто перебирать список и проверять дубликаты, но я понял, что set()
делает, когда он инициализируется.
Так что если mylist = [3,1,5,2,4,4,1,4,2,5,1,3]
и я действительно просто хочу пройти через [1,2,3,4,5]
(заказ не имеет значения), следует ли использовать set(mylist)
или что-то еще?
Альтернатива возможна в последнем примере, так как список содержит каждое целое число между его минимальным и максимальным значением, я мог бы перебирать range(min(mylist),max(mylist))
или через set(mylist)
. Должен ли я вообще стараться избегать использования набора в этом случае? Кроме того, будет ли поиск min
и max
медленнее, чем просто создание set
?
В последнем примере set
выполняется быстрее:
from numpy.random import random_integers
ids = random_integers(1e3,size=1e6)
def set_loop(mylist):
idlist = []
for id in set(mylist):
idlist.append(id)
return idlist
def list_loop(mylist):
idlist = []
for id in range(min(mylist),max(mylist)):
idlist.append(id)
return idlist
%timeit set_loop(ids)
#1 loops, best of 3: 232 ms per loop
%timeit list_loop(ids)
#1 loops, best of 3: 408 ms per loop