Во-первых, вы должны использовать set
в Python, чтобы найти уникальные значения, потому что это эффективно дает уникальные элементы.
Если вы хотите использовать list
, то код, который вы предоставили, является правильным! Если вы используете numpy
в коде (который может быть хорошим выбором для больших объемов данных), проверить numpy.unique
>>> import numpy as np
>>> wordsList = [u'nowplaying', u'PBS', u'PBS', u'nowplaying', u'job', u'debate', u'thenandnow']
>>> np.unique(wordsList)
array([u'PBS', u'debate', u'job', u'nowplaying', u'thenandnow'],
dtype='<U10')
Также обратите внимание на следующие результаты тестов для поиска unique values
Link
кода предоставляются на связь, но при добавлении здесь для справки:
def f1(seq):
# not order preserving
set = {}
map(set.__setitem__, seq, [])
return set.keys()
def f2(seq):
# order preserving
checked = []
for e in seq:
if e not in checked:
checked.append(e)
return checked
def f3(seq):
# Not order preserving
keys = {}
for e in seq:
keys[e] = 1
return keys.keys()
def f4(seq):
# order preserving
noDupes = []
[noDupes.append(i) for i in seq if not noDupes.count(i)]
return noDupes
def f5(seq, idfun=None):
# order preserving
if idfun is None:
def idfun(x): return x
seen = {}
result = []
for item in seq:
marker = idfun(item)
# in old Python versions:
# if seen.has_key(marker)
# but in new ones:
if marker in seen: continue
seen[marker] = 1
result.append(item)
return result
def f6(seq):
# Not order preserving
set = Set(seq)
return list(set)
Benchmark Результаты
* f2 13.24
* f4 11.73
* f5 0.37
f1 0.18
f3 0.17
f6 0.19
Uhhh просто использовать 'set'. Я думаю, 'dict.fromkeys (l1 + l2) .keys()', но это в значительной степени обман. –
@AdamSmith это очень интересное решение – tinySandy
@pianista: Не было downvote, но я думаю, что причина такова: * Почему бы не использовать 'set'? Вот почему у Python есть 'set', вот что он делает. * –