2012-02-26 13 views
5

Mi sono imbattuto in un problema riguardante il set in Python 2.7.Python: come consentire duplicati in un set?

Ecco il blocco di codice di esempio appropriato:

letters = set(str(raw_input("Type letters: "))) 

Come si può vedere, il punto è quello di scrivere alcune lettere per assegnare alle "lettere" per un uso successivo. Ma se digito "aaabbcdd", l'uscita di "lettere" restituisce

set(['a', 'c', 'b', 'd']) 

La mia domanda è come scrivere il codice, in modo che l'uscita permetterà duplicati come questo:

set(['a','a','a','b','b','c','d','d']) 

?

+7

Un set è una struttura dati che sempre e solo contiene elementi unici. Se vuoi duplicati, usa una diversa struttura dati (non un set). –

+0

per esempio 'letters = list (raw_input (" Type letters: "))'? –

+0

-1: la domanda sembra ignorare le comuni definizioni matematiche e il linguaggio Python. –

risposta

11

set non memorizza i duplicati, motivo per cui è denominato set. Dovresti usare un ordinario str o list e ordinarlo se necessario.

>>> sorted(raw_input("Type letters: ")) 
Type letters: foobar 
['a', 'b', 'f', 'o', 'o', 'r'] 

Un'alternativa (ma eccessivo per il tuo esempio) è il contenitore multiset collections.Counter, disponibile da Python 2.7.

>>> from collections import Counter 
>>> c = Counter(raw_input("Type letters: ")) 
>>> c 
Counter({'o': 2, 'a': 1, 'r': 1, 'b': 1, 'f': 1}) 
>>> sorted(c.elements()) 
['a', 'b', 'f', 'o', 'o', 'r'] 
+0

sì, prova list() invece di set() – jisaacstone

+0

Oh. Non lo sapevo Sono ancora nuovo a questo. Grazie! – Alex

2

Un set non consente duplicati per definizione. Utilizzare un elenco semplice.

Nel tuo caso:

letters = list(str(raw_input("Type letters: "))) 
print sorted(letters)