I have a list of strings with my filenames:
flist = ['0.png','10.png', '3.png', '4.png', '100.png']
flist.sort()
print(flist)
Output:
['0.png', '10.png', '100.png', '3.png', '4.png']
But I want:
['0.png', '3.png', '4.png', '10.png', '100.png']
Is there a simple way to do this?
Yes:
flist.sort(key=lambda fname: int(fname.split('.')[0]))
Explanation: strings are lexically sorted so "10"
comes before "3"
(because "1"
< "3"
, so whatever comes after "1"
in the first string is ignored). So we use list.sort()
's key
argument which is a callback function that takes a list item and return the value to be used for ordering for this item - in your case, an integer built from the first part of the filename. This way the list is properly sorted on the numerical values.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With