Самый быстрый вид списка с альфа-сортировкой в ​​Python - PullRequest
0 голосов
/ 11 октября 2018

У меня есть простой список, в котором числа являются строками:

simple_list = ['1','2','3','4','5','K','P']

Я хотел бы отсортировать это сначала по альфе, а затем по цифрам.

В настоящее время яя делаю:

# Probably a faster way to handle this
alpha_list = [x for x in simple_list if not x.isnumeric()]
grade_list = [x for x in simple_list if x.isnumeric()]
# Put the alpha grades at the beginning of the grade_list
if alpha_list:
    grade_list = sorted(alpha_list) + sorted(grade_list)

Я уверен, что есть более быстрый способ справиться с этим - я просто не могу его найти.

Результат, который я сейчас получаю, правильный ['K','P','1','2','3','4','5']

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

1 Ответ

0 голосов
/ 11 октября 2018

Вы можете отсортировать список с помощью ключевой функции, которая возвращает кортеж из str.isdigit() test и строку, и, если найдена строка из цифр, преобразуйте ее в целое число:

sorted(simple_list, key=lambda c: (c.isdigit(), int(c) if c.isdigit() else c))

Это возвращает:

['K', 'P', '1', '2', '3', '4', '5']
...