Pergunta

Esta questão já tem uma resposta aqui:

Dada uma lista de strings, quero classificá-lo em ordem alfabética e remover duplicatas. Eu sei que posso fazer isso:

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

mas eu não sei como recuperar os membros da lista a partir do hash em ordem alfabética.

Eu não estou casado com o hash, portanto, qualquer maneira de realizar este trabalho. Além disso, o desempenho não é um problema, então eu preferiria uma solução que é expressa em código claramente para um rápido mas mais opaca.

Foi útil?

Solução

A lista pode ser classificada e deduplicados usando built-in funções:

myList = sorted(set(myList))
  • set é uma função embutida para Python> = 2,3
  • sorted é um built-in função para Python> = 2,4

Outras dicas

Se a sua entrada já está ordenada, então pode haver uma maneira mais simples de fazê-lo:

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

Se você quiser manter a ordem da lista original, é só usar OrderedDict com None como valores.

Em python2:

    from collections import OrderedDict
    from itertools import izip, repeat

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

Em Python3 é ainda mais simples:

    from collections import OrderedDict
    from itertools import repeat

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

Se você não gosta iterators (zip e repetição) você pode usar um gerador (funciona tanto em 2 e 3):

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

Se a sua clareza que você está depois, em vez de velocidade, eu acho que isso é muito claro:

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

de O (n ^ 2) que, com o uso repetido de não por cada elemento da lista de entrada.

> mas eu não sei como recuperar os membros da lista a partir do hash em ordem alfabética.

Não é realmente a sua pergunta principal, mas para referência futura resposta de Rod usando sorted pode ser usado para percorrer as teclas de um dict na ordem de classificação:

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

e também por causa do tuple são ordenados pelo primeiro membro da tupla, você pode fazer o mesmo com items:

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

Para os dados de cadeia

 output = []

     def uniq(input):
         if input not in output:
            output.append(input)
 print output     
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top