Скажем, у меня есть отсортированный список строк, как в:
['A', 'B' , 'B1', 'B11', 'B2', 'B21', 'B22', 'C', 'C1', 'C11', 'C2']
Теперь я хочу сортировать на основе конечного числового значения для B
- поэтому у меня есть:
['A', 'B' , 'B1', 'B2', 'B11', 'B21', 'B22', 'C', 'C1', 'C11', 'C2']
Один из возможных алгоритмов состоит в том, чтобы хешировать регулярное выражение, например regex = re.compile(ur'(B)(\d*))
, найти индексы первого и последнего B
, нарезать список, отсортировать фрагмент с помощью второй группы регулярных выражений, а затем вставить отсортированный фрагмент. Однако это кажется слишком большим количеством хлопот. Есть ли способ написать ключевую функцию, которая "оставляет элемент на месте", если он не соответствует регулярному выражению и только
сортирует элементы (подсписки), которые соответствуют?
Примечание: приведенное выше просто пример; Я не обязательно знаю шаблон (или, возможно, захочу также сортировать C или любую строку, в которой есть завершающий номер). В идеале я ищу подход к общей проблеме сортировки только подпоследовательностей, которые соответствуют заданному критерию (или в противном случае - только те, которые соответствуют конкретному критерию заданного префикса, за которым следует строка цифр).