2013-10-07 3 views
0

Я имею несколько файлов, как ..Сортировка файлов на основе числа в них

l.1,l.3,l.2,l.12,l.36,l.24 

Когда я сортировки списка она дает мне ...

l.1,l.12,l.2,l.24,l.3,l.36 

Как я могу получить их таким образом ..

l.2,l.2,l.3,l.12,l.24,l.36 

Примечание: потому что это не позволяет добавить фактическое имя файла, как это я ве дал его в виде списка. но к фактическим именам файлов присоединяется '.' например l.1 l.2

Я могу написать алгоритм сортировки пузырьков для этого. Но я хочу более простой способ ..
Благодаря

+0

Являются ли эти '1's (число) или' l's (письмо)? Кроме того, это список чисел, список строк или одна большая строка? –

+0

Поиск натурального сорта питона; например http://stackoverflow.com/questions/4836710/does-python-have-a-built-in-function-for-string-natural-sort – iterums

+0

sorry tobias_k его буква 'l' s не цифра '1's: P –

ответ

1

Здесь вы идете:

l = ['l.1','l.3','l.2','l.12','l.36','l.24'] 
    sorted(l, key = lambda x: int(x[2:])) 
+0

Большое спасибо –

1

В одной строке:

>>> li = ["l.1", "l.3", "l.2", "l.12", "l.36", "l.24"] 
>>> sorted(li, key=lambda x: int(x.split(".")[-1])) 
['l.1', 'l.2', 'l.3', 'l.12', 'l.24', 'l.36'] 
+0

Могу ли вы рассказать мне, как перечислить файлы в каталоге, соответствующем выделенной строке, без цикла for в строке :) –

+0

Сначала отфильтруйте список (например, 'li = [x for x in li if" somestring "in x]'), тогда действуйте так, как указано выше. Если это сложный шаблон, который вы хотите сопоставить, используйте регулярное выражение. –

+0

Спасибо, что я реализую его сейчас, но просто хочу проверить любую встроенную функцию. Большое спасибо –

0

Как указано в документации Python функция сортировки в списке занимает множественный аргумент (relevant section here).

Вы можете использовать аргумент key для конкретной функции, которая получает ключ. Реализация для вас случае может быть:

def key_fn(n): 
    return int(n.split('.')[-1]) 

Вы тогда могли бы сделать:

l = ["l.1","l.3","l.2","l.12","l.36","l.24"] 
l.sort(key=key_fn) 
Смежные вопросы