Een reeks waarden sorteren

Ik heb waarden als deze:

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'])  

Ik wil de waarden in elke setin oplopende volgorde sorteren. Ik wil niet sorteren tussen de sets, maar de waarden in elke set.


Antwoord 1, autoriteit 100%

Uit een opmerking:

Ik wil elke set sorteren.

Dat is makkelijk. Voor elke set s(of iets anders dat herhaald kan worden), sorted(s)retourneert een lijst van de elementen van sin gesorteerde volgorde:

>>> 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']

Merk op dat sortedje een listgeeft, niet een set. Dat komt omdat het hele punt van een set, zowel in wiskundeals in bijna elke programmeertaal,* is dat het niet geordend is: de sets {1, 2}en {2, 1}zijn dezelfde set.


U wilt die elementen waarschijnlijk niet echt als tekenreeksen sorteren, maar als getallen (dus 4.918560000 komt vóór 10.277200999 in plaats van erna).

De beste oplossing is om de getallen in de eerste plaats als getallen op te slaan in plaats van als tekenreeksen. Maar als dat niet het geval is, hoeft u alleen maar een functie keyte gebruiken:

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

Zie voor meer informatie de Sorteer-HOWTOin de officiële documenten.


* Zie de opmerkingen voor uitzonderingen.

Other episodes