Ответ 1
Список можно сортировать и дедуплицировать с помощью встроенных функций:
myList = sorted(set(myList))
Учитывая список строк, я хочу отсортировать его по алфавиту и удалить дубликаты. Я знаю, что могу это сделать:
from sets import Set
[...]
myHash = Set(myList)
но я не знаю, как извлечь элементы списка из хэша в алфавитном порядке.
Я не женат на хеше, поэтому любой способ добиться этого будет работать. Кроме того, производительность не является проблемой, поэтому я предпочел бы, чтобы решение, явно выраженное в коде, было быстрым, но более непрозрачным.
Список можно сортировать и дедуплицировать с помощью встроенных функций:
myList = sorted(set(myList))
Если ваш вход уже отсортирован, тогда может быть более простой способ сделать это:
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), хотя при повторном использовании не для каждого элемента входного списка.
> но я не знаю, как получить элементы списка из хэша в алфавитном порядке.
Не совсем ваш главный вопрос, но для дальнейшего использования Rod ответ с помощью 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