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.
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 maintain them as strings, but sorted by value and not lexicographically.
key=float.sort(key=float) achieves the sameIn 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.
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]
b, which may or may not be ideal.
ais already sorted.1is smaller that9.0always and smaller number at index0