On 23/05/17 22:14, Mahmood Naderan via Python-list wrote:
sorted=[[int(name.split("_")[-1]), name] for name in files]

This isn't sorting anything. At no point do you invoke a sort operation.

It's processing the list in the original order and generating a new list with a different format but *in the same order*.

You should either call the sorted() built-in or invoke the list.sort() method on the list to cause a sort operation to be performed.

I suspect the reason why "it works" is because the filenames happen to be returned in a sorted order already when you tested it ...

Use the REPL to see what you are doing (and force an unsorted order to check that what you are doing works):

$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> files = ["foo_99", "foo_10", "foo_2", "foo_20"]
>>> sorted_files=[[int(name.split("_")[-1]), name] for name in files]
>>> files
['foo_99', 'foo_10', 'foo_2', 'foo_20']
>>> sorted_files
[[99, 'foo_99'], [10, 'foo_10'], [2, 'foo_2'], [20, 'foo_20']]
>>> sorted(sorted_files)
[[2, 'foo_2'], [10, 'foo_10'], [20, 'foo_20'], [99, 'foo_99']]
>>> sorted_files
[[99, 'foo_99'], [10, 'foo_10'], [2, 'foo_2'], [20, 'foo_20']]
>>> sorted_files.sort()
>>> sorted_files
[[2, 'foo_2'], [10, 'foo_10'], [20, 'foo_20'], [99, 'foo_99']]

Regards,
E.
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to