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



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




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

    28 ответов



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



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


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



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

1441   6  

6 ответов:

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

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 и repeat), вы можете использовать генератор (работает как в 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 может использоваться для обхода a dictключи в отсортированном порядке:

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

и так tuple ' s упорядочиваются первым членом кортежа, вы можете сделать то же самое с 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     

Comments

    Ничего не найдено.