Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sorting a list of strings numerically

Tags:

python

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?

like image 435
Artur Müller Romanov Avatar asked Dec 23 '22 03:12

Artur Müller Romanov


1 Answers

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.

like image 184
bruno desthuilliers Avatar answered Dec 25 '22 16:12

bruno desthuilliers