#python #list #sorting
#python #Список #сортировка
Вопрос:
У меня есть функция, которую я нашел, которая сортирует список строк файлов по номеру. Я нашел это в Интернете, и это отлично работает. Но я хочу просто сделать это, чтобы не все было сделано в одной строке, и это было более читабельно для других людей. Но мне трудно это сделать, потому что я не понимаю отсортированную функциональную клавишу, а лямбда-очень хорошо. Любая помощь будет принята с благодарностью.
Ввод
input_list = ['file_stuff_1','file_stuff_23','file_stuff_4','file_stuff_6']
Код
output = sorted(input_list, key=lambda x: int("".join([i for i in x if i.isdigit()])))
Вывод
['file_stuff_1','file_stuff_4','file_stuff_6','file_stuff_23']
Попытка
Это была моя первая попытка. Но я не уверен, как исправить цифры, чтобы он работал как ключ.
def sort_list(input_list):
for item in input_list:
if (item.isdigit()):
digits = int(''.join(item))
output = sorted(input_list,digits)
return output
Ответ №1:
def get_nums_from_filename(file_name):
digits = [char for char in file_name if char.isdigit()]
return int(''.join(digits))
input_list = ['file_stuff_1','file_stuff_23','file_stuff_4','file_stuff_6']
sorted(input_list, key=get_nums_from_filename)
https://docs.python.org/3/howto/sorting.html#key-functions
параметр «key» в sorted() указывает функцию, которая должна применяться к каждому элементу для получения результирующего значения, затем сортировка исходных значений выполняется на основе соответствующих результирующих значений.
Комментарии:
1. Спасибо! Это работает, вы знаете, почему это на самом деле работает? Функция возвращает строку чисел. Я не совсем понимаю, как sort может использовать это, чтобы выяснить, что сортировать.
2. «.join(цифры) создает строку чисел. Часть int() изменяет это со строки на целое число, поэтому функция возвращает целое число. sorted() использует целое число для сортировки