Python сортировка списка строк

1

Как я могу отсортировать это?

>>> list = ["a_0","a_1","a_2","a_3","a_10","a_11","a_23","a_5","a_6","a_5"]
>>> sorted(list)
['a_0', 'a_1', 'a_10', 'a_11', 'a_2', 'a_23', 'a_3', 'a_5', 'a_5', 'a_6']>

Мне нужно, чтобы это было:

['a_0', 'a_1', 'a_2', 'a_3', 'a_5', 'a_5', 'a_6, 'a_10', 'a_11', 'a_23']>

Таким образом, его сортировка основана на "количестве", Спасибо, я заранее!

Теги:
sorting

2 ответа

10
Лучший ответ

Вы имеете в виду это: sorted(list, key=lambda d: int(d[2:]))?

  • 0
    Это оно! Огромное спасибо
  • 2
    Обратите внимание, что это будет сортировать только на основе числа, а не на «а» вообще. Также требуется, чтобы цифры начинались с символа 2.
Показать ещё 2 комментария
6

Вам нужно написать "ключевую функцию", которая переводит вашу строку в ключ поиска, который имеет нужный вам порядок. Например:

def key(k):
    s, sep, i = k.partition('_')
    return (s, int(i))

>>> L = ["a_0","a_1","b_2","c_2","a_10","a_11","a_23","b_5","a_6","c_5"]
>>> sorted(L, key=key)
['a_0', 'a_1', 'a_6', 'a_10', 'a_11', 'a_23', 'b_2', 'b_5', 'c_2', 'c_5']
  • 0
    спасибо, это на самом деле то, что мне нужно для моей конкретной цели. Я немного изменил, теперь работает отлично. Несмотря на то, что ваш ответ правильный, я пометил ответ выше как правильный в зависимости от вопроса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню