2015-10-01 3 views
4

Являетсясписок Python (набор (список (...)), чтобы удалить дубликаты

list(set(some_list)) 

хороший способ, чтобы удалить дубликаты из списка? (Python 3.3, если это имеет значение)

(Ред рассмотреть некоторые из комментариев ... это было возможно, слишком лаконична раньше).

в частности,

  • это, по крайней мере сопоставимыми, с точки зрения эффективности (основной но и память), если не лучше, чем собственный алгоритм; это, безусловно, самый сжатый код
  • он надежный? в каких ситуациях он ломается? (уже упоминалось, что ... элементы списка должны быть хешированы)
  • есть ли еще питонезский способ сделать это?
+0

Что вы имеете в виду, когда говорите хорошо? – ddsnowboard

+1

выглядит хорошо для меня! – dbliss

+1

Да, конечно. Так в чем ваш вопрос? –

ответ

4

Метод, который вы показываете, вероятно, является самым коротким и простым в понимании; что сделало бы его Pythonic большинством определений.

Если необходимо сохранить порядок в списке, вы можете использовать collections.OrderedDict вместо set:

list(collections.OrderedDict((k, None) for k in some_list).keys()) 

Если элементы не hashable, но могут быть отсортированы, вы можете использовать itertools.groupby для удаления дубликатов:

list(k for k,g in itertools.groupby(sorted(some_list))) 
3

(Как было отмечено в комментариях, добавляя этот комментарий как ответ, а.)

Ваш собственный решение выглядит хорошо и довольно Pythonic для меня. Если вы используете Numpy, вы также можете сделать new_list = numpy.unique(some_list). Это более или менее «читается как предложение», которое, я считаю, всегда является хорошим ориентиром для того, чтобы что-то было «Pythonic».

1

Чтобы сохранить порядок кратчайшим (начиная с Python 2.7):

>>> from collections import OrderedDict 
>>> list(OrderedDict.fromkeys('abracadabra')) 
['a', 'b', 'r', 'c', 'd'] 

Если нет необходимости сохранять порядок list(set(...)) просто отлично.

+1

Я не знал о 'fromkeys', и я забыл, что' list' вернет только ключи. Ваш ответ намного проще, чем мой, +1. –

Смежные вопросы