2012-02-26 18 views
5

Me encontré con un problema relacionado con el conjunto en Python 2.7.Python: cómo permitir duplicados en un conjunto?

Aquí está el bloque de código de ejemplo apropiado:

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

Como se puede ver, el punto es escribir algunas letras para asignar a las "letras" para su uso posterior. Pero si escribo "aaabbcdd", la salida de "letras" devuelve

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

Mi pregunta es cómo escribir el código, por lo que la salida permitirá duplicados como este:

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

?

+7

Un conjunto es una estructura de datos que sólo alguna vez contiene elementos únicos. Si desea duplicados, use una estructura de datos diferente (no un conjunto). –

+0

por ejemplo 'letters = list (raw_input (" Type letters: "))'? –

+0

-1: la pregunta parece ignorar las definiciones matemáticas comunes, así como el lenguaje Python. –

Respuesta

11

set no almacena duplicados, por lo que se llama set. Debe usar un str ordinario o list y ordenarlo si es necesario.

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

Una alternativa (pero excesiva para su ejemplo) es el contenedor multiset collections.Counter, disponible de 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í, try list() en lugar de establecer() – jisaacstone

+0

Oh. No lo sabía Todavía soy nuevo en esto. ¡Gracias! – Alex

2

Un conjunto no permite duplicados por definición. Usa una lista simple.

En su caso:

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