How to sort python list of strings of numbers

Question:

I am trying to sort list of strings containing numbers

a = ["1099.0","9049.0"]
a.sort()
a
['1099.0', '9049.0']

b = ["949.0","1099.0"]
b.sort()    

b
['1099.0', '949.0']

a
['1099.0', '9049.0']

But list b is sorting and not list a

Asked By: Vaibhav Jain

||

Answers:

Convert them to int or float or even decimal (since it has trailing numbers)

>>> b = [float(x) for x in b]
>>> b.sort()
>>> b
[949.0, 1099.0]
Answered By: user1786283

You want to sort based on the float values (not string values), so try:

>>> b = ["949.0","1099.0"]
>>> b.sort(key=float)
>>> b
['949.0', '1099.0']
Answered By: arshajii

use a lambda inside sort to convert them to float and then sort properly:

a = sorted(a, key=lambda x: float(x))

so you will mantain them as strings but sorted by value and not lexicographically

Answered By: Samuele Mattiuzzo

In case anybody is dealing with numbers and extensions such as 0.png, 1.png, 10.png, 2.png…
We need to retrieve and sort the characters before the extension since this extension does not let us to convert the names to floats:

myList = sorted(myList, key=lambda x: int(x[:-4]))

PD: After many years I have edited this answer changing float to int because I guess it is more efficient and more precise. It is a rare case to need floats for this purpose and it might bring errors.

Answered By: Borja_042
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.