Tenho 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'])
Quero classificar os valores em cada uma set
em ordem crescente. Não quero classificar entre os conjuntos, mas os valores em cada conjunto.
list
.std::set
está ordenado.Respostas:
De um comentário:
Isso é fácil. Para qualquer conjunto
s
(ou qualquer outra coisa iterável),sorted(s)
retorna uma lista dos elementos des
na ordem de classificação:Observe que
sorted
está dando a você umlist
, não umset
. Isso porque todo o objetivo de um conjunto, tanto na matemática quanto em quase todas as linguagens de programação , * é que ele não é ordenado: os conjuntos{1, 2}
e{2, 1}
são o mesmo conjunto.Você provavelmente não deseja classificar esses elementos como strings, mas como números (então 4,918560000 virá antes de 10.277200999, e não depois).
A melhor solução provavelmente é armazenar os números como números em vez de strings. Mas se não, você só precisa usar uma
key
função:Para mais informações, veja o Sorting HOWTO na documentação oficial.
* Veja os comentários para exceções.
fonte
set
signifique "lista ordenada", e você tem que dizerunordered_set
que significa "definir" ...std::set
não expor a ordenação (e não apenas nas maneiras óbvias através da API; a função de ordenação é, na verdade, parte do tipo de qualquer dado conjunto). O fato de que os elementos são sempre mantidos ordenados por uma ordem estrita e fraca faz parte da própria definição do conceito. Portanto, seu argumento é discutível. Mas mesmo se não fosse, por que isso importaria? Os conjuntos são desordenados em quase todas as linguagens de programação, assim como na matemática. O fato de haver uma linguagem remota que usa a palavra para significar outra coisa não torna essa afirmação menos verdadeira.