Ordenar un conjunto de valores [cerrado]

112

Tengo valores como este:

set(['0.000000000', '0.009518000', '10.277200999', '0.030810999', '0.018384000', '4.918560000'])
set(['4.918859000', '0.060758000', '4.917336999', '0.003949999', '0.013945000', '10.281522000', '0.025082999'])  

Quiero ordenar los valores de cada uno seten orden creciente. No quiero clasificar entre los conjuntos, sino los valores en cada conjunto.

Justin Carrey
fuente
3
¿Qué tienen que ver las tuplas con el problema y qué has intentado?
Fred Foo
3
No creo que los conjuntos de Python tengan un concepto de ordenación. Esto podría ayudarlo: stackoverflow.com/questions/1653970/…
zallarak
3
un conjunto no tiene orden. esa es una de sus propiedades. en todos los idiomas. utilizar un list.
Karoly Horvath
4
@KarolyHorvath "un conjunto no tiene orden. Esa es una de sus propiedades. En todos los idiomas". El de C ++ std::setestá ordenado.
Timothy Shields
17
¿Por qué la gente cerró (o salió del tema) esta pregunta después del hecho? Sí, hubiera sido mejor si el OP hubiera descrito su problema en lugar de obligarnos a pescarlo. Pero ahora que hemos hecho eso, y que hemos editado su pregunta para que coincida, y él ha aceptado una respuesta, no veo qué sentido tiene la votación cerrada.
abarnert

Respuestas:

218

De un comentario:

Quiero ordenar cada conjunto.

Eso es fácil. Para cualquier conjunto s(o cualquier otra cosa iterable), sorted(s)devuelve una lista de los elementos de sen orden ordenado:

>>> s = set(['0.000000000', '0.009518000', '10.277200999', '0.030810999', '0.018384000', '4.918560000'])
>>> sorted(s)
['0.000000000', '0.009518000', '0.018384000', '0.030810999', '10.277200999', '4.918560000']

Tenga en cuenta que le sortedestá dando un list, no un set. Eso es porque el objetivo de un conjunto, tanto en matemáticas como en casi todos los lenguajes de programación , * es que no está ordenado: los conjuntos {1, 2}y {2, 1}son el mismo conjunto.


Probablemente no desee ordenar esos elementos como cadenas, sino como números (por lo que 4.918560000 vendrá antes de 10.277200999 en lugar de después).

Lo más probable es que la mejor solución almacene los números como números en lugar de cadenas en primer lugar. Pero si no, solo necesita usar una keyfunción:

>>> sorted(s, key=float)
['0.000000000', '0.009518000', '0.018384000', '0.030810999', '4.918560000', '10.277200999']

Para obtener más información, consulte el ordenar en los documentos oficiales.


* Consulte los comentarios para conocer las excepciones.

abarnert
fuente
1
@TimothyShields: Tienes razón, debería haber dicho "todos los lenguajes de programación a los que no les gusta abusar de términos comunes". En un lenguaje donde "no modificable" significa "mutante", no es sorprendente que eso setsignifique "lista ordenada", y tienes que decir unordered_setque significa "conjunto"…
abarnert
2
Si ese nombre es bueno o malo no es lo que está en discusión. La afirmación de que "los conjuntos nunca se ordenan en ningún idioma" es falsa.
Timothy Shields
5
No encontrará la palabra "desordenado" en la página de Wikipedia sobre un conjunto matemático. Tampoco encontrará la palabra "ordenado". Eso es porque es irrelevante para las operaciones matemáticas en conjuntos. Si un idioma en particular elige ordenar los conjuntos es un detalle de implementación. en.wikipedia.org/wiki/Set_(mathematics)
Timothy Shields
3
@TimothyShields: Mientras tanto, la página de wikipedia en Set (matemáticas) que vinculó no tiene la palabra "desordenada" porque ya es obvia por la definición. En particular, "Los conjuntos A y B son iguales si y solo si tienen exactamente los mismos elementos". Eso no es cierto para las colecciones ordenadas. (También hay frases como: "El orden en el que se enumeran los elementos de un conjunto o de un conjunto múltiple es irrelevante", por lo que si hubiera buscado de manera un poco diferente, podría haberlo encontrado incluso sin comprender el concepto.)
abarnert
3
@TimothyShields: Pero std::set no exponga el pedido (no sólo en las formas obvias a través de la API, la función de ordenamiento es en realidad parte del tipo de cualquier conjunto dado). El hecho de que los elementos se mantengan siempre ordenados por un estricto orden débil es parte de la propia definición del concepto. Entonces, su argumento es discutible. Pero incluso si no lo fuera, ¿por qué importaría? Los conjuntos están desordenados en casi todos los lenguajes de programación, al igual que en matemáticas. El hecho de que haya un idioma periférico que use la palabra para significar otra cosa no hace que esa afirmación sea menos cierta.
abarnert