Сортировка списков строк с цифрами и буквами: методы и примеры

Сортировка списка строк, содержащих комбинацию цифр и букв, может быть распространенной задачей в программировании. В этой статье блога рассматриваются различные методы достижения этой цели, а также приводятся примеры кода. К концу вы получите полное представление о различных подходах к сортировке таких списков и сможете выбрать тот, который лучше всего соответствует вашим потребностям.

Методы сортировки списков строк с цифрами и буквами:

Метод 1: естественная сортировка с помощью буквенно-цифрового ключа сортировки
Буквенно-цифровой ключ сортировки — это метод, который обрабатывает числовые подстроки как действительные числа. Этот метод гарантирует, что числа в строках отсортированы в числовом порядке.

my_list = ['item2', 'item10', 'item1', 'item25', 'item3']
sorted_list = sorted(my_list, key=lambda x: [(int(y) if y.isdigit() else y) for y in re.split('([0-9]+)', x)])
print(sorted_list)

Метод 2: пользовательская сортировка с помощью регулярных выражений
Регулярные выражения могут помочь извлечь числовые и нечисловые части каждой строки и обеспечить настраиваемую логику сортировки.

import re
my_list = ['item2', 'item10', 'item1', 'item25', 'item3']
sorted_list = sorted(my_list, key=lambda x: (int(re.findall('\d+', x)[0]), re.sub('\d+', '', x)))
print(sorted_list)

Метод 3. Буквенно-цифровая сортировка с использованием библиотеки естественной сортировки
Библиотека natsortпредоставляет алгоритм естественной сортировки, который правильно обрабатывает строки со смешанными цифрами и буквами.

from natsort import natsorted
my_list = ['item2', 'item10', 'item1', 'item25', 'item3']
sorted_list = natsorted(my_list)
print(sorted_list)

Метод 4. Разделение и сортировка по числовым и нечисловым частям
Этот метод разбивает каждую строку на числовые и нечисловые части и сортирует их отдельно.

import re
my_list = ['item2', 'item10', 'item1', 'item25', 'item3']
sorted_list = sorted(my_list, key=lambda x: (int(re.findall('\d+', x)[0]), re.sub('\d+', '', x)))
print(sorted_list)

Метод 5. Дополнение числовых частей и использование лексикографической сортировки
Этот метод дополняет числовые части ведущими нулями, чтобы обеспечить одинаковую длину. Затем для сортировки строк используется лексикографическая сортировка.

import re
my_list = ['item2', 'item10', 'item1', 'item25', 'item3']
sorted_list = sorted(my_list, key=lambda x: re.sub('(\d+)', lambda m: f'{int(m.group(0)):08}', x))
print(sorted_list)