Domanda

    

Questa domanda ha già una risposta qui:

         

Dato un elenco di stringhe, voglio ordinarlo in ordine alfabetico e rimuovere i duplicati. So di poterlo fare:

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

ma non so come recuperare i membri della lista dall'hash in ordine alfabetico.

Non sono sposato con l'hash, quindi qualsiasi modo per farlo funzionerà. Inoltre, le prestazioni non sono un problema, quindi preferirei una soluzione espressa chiaramente in codice a una veloce ma più opaca.

È stato utile?

Soluzione

Un elenco può essere ordinato e deduplicato utilizzando le funzioni integrate:

myList = sorted(set(myList))
  • set è una funzione integrata per Python < !> gt; = 2.3
  • sorted è una funzione integrata per Python > = 2.4

Altri suggerimenti

Se il tuo input è già ordinato, potrebbe esserci un modo più semplice per farlo:

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

Se vuoi mantenere l'ordine dell'elenco originale, usa OrderedDict con None come valori.

In Python2:

    from collections import OrderedDict
    from itertools import izip, repeat

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

In Python3 è ancora più semplice:

    from collections import OrderedDict
    from itertools import repeat

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

Se non ti piacciono gli iteratori (zip e ripetizione) puoi usare un generatore (funziona sia in 2 & amp; 3):

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

Se è la chiarezza che cerchi, piuttosto che la velocità, penso che sia molto chiaro:

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

È O (n ^ 2) però, con l'uso ripetuto di non in per ogni elemento dell'elenco di input.

gt &; ma non so come recuperare i membri della lista dall'hash in ordine alfabetico.

Non proprio la tua domanda principale, ma per riferimento futuro la risposta di Rod usando sorted può essere usata per attraversare le chiavi di dict in ordine ordinato:

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

e anche perché tuple sono ordinati dal primo membro della tupla, puoi fare lo stesso con items:

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

Per i dati della stringa

 output = []

     def uniq(input):
         if input not in output:
            output.append(input)
 print output     
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top