Как удалить дубликаты из списка Python и сохранить порядок?[дубликат]

StackOverflow https://stackoverflow.com/questions/479897

  •  20-08-2019
  •  | 
  •  

Вопрос

На этот вопрос уже есть ответ здесь:

Имея список строк, я хочу отсортировать его по алфавиту и удалить дубликаты.Я знаю, что могу сделать это:

from sets import Set
[...]
myHash = Set(myList)

но я не знаю, как получить элементы списка из хеша в алфавитном порядке.

Я не женат на хеше, поэтому любой способ добиться этого подойдет.Кроме того, производительность не является проблемой, поэтому я бы предпочел решение, четко выраженное в коде, быстрому, но более непрозрачному.

Это было полезно?

Решение

Список можно сортировать и дедуплицировать с помощью встроенных функций:

myList = sorted(set(myList))
  • set это встроенная функция для Python >= 2.3
  • sorted это встроенная функция для Python >= 2.4

Другие советы

Если ваш ввод уже отсортирован, возможно, есть более простой способ сделать это:

from operator import itemgetter
from itertools import groupby
unique_list = list(map(itemgetter(0), groupby(yourList)))

Если вы хотите сохранить порядок исходного списка, просто используйте OrderedDict с None как ценности.

В Python2:

    from collections import OrderedDict
    from itertools import izip, repeat

    unique_list = list(OrderedDict(izip(my_list, repeat(None))))

В Python3 это еще проще:

    from collections import OrderedDict
    from itertools import repeat

    unique_list = list(OrderedDict(zip(my_list, repeat(None))))

Если вам не нравятся итераторы (zip и повтор), вы можете использовать генератор (работает как во 2, так и в 3):

    from collections import OrderedDict
    unique_list = list(OrderedDict((element, None) for element in my_list))

Если вам нужна ясность, а не скорость, я думаю, это очень ясно:

def sortAndUniq(input):
  output = []
  for x in input:
    if x not in output:
      output.append(x)
  output.sort()
  return output

Однако это O(n^2) с повторным использованием not in для каждого элемента входного списка.

> но я не знаю, как получить элементы списка из хеша в алфавитном порядке.

На самом деле это не ваш главный вопрос, но для дальнейшего использования ответ Рода с использованием sorted можно использовать для обхода dictключи в отсортированном порядке:

for key in sorted(my_dict.keys()):
   print key, my_dict[key]
   ...

а еще потому, что tupleупорядочены по первому члену кортежа, вы можете сделать то же самое с items:

for key, val in sorted(my_dict.items()):
    print key, val
    ...

Для строковых данных

 output = []

     def uniq(input):
         if input not in output:
            output.append(input)
 print output     
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top