2022-03-24 20:08:00
Сортировка в Python - не все так простоЧасто возникает потребность отсортировать список. Многие используют для этого метод sort:
arr = [1, 3, 2]
arr.sort()
print(arr)
# [1, 2, 3]
Но с этим методом не все так просто
1. In-place сортировка Метод sort выполняет сортировку in-place. Другими словами, вы получаете не новый отсортированный список, а измененный исходный. Сам по себе метод возвращает None. По очевидным причинам, это не всегда удобно.
arr = [1, 3, 2]
print(arr.sort())
# None
print(arr)
# [1, 2, 3]
2. Сортировка составного спискаЕсли вы попробуете отсортировать составной список, то вы получите ошибку. Например:
arr = ['s', 'p', [[1], [2, 3]], 'isok', 2]
# TypeError: '<' not supported between instances of 'list' and 'str'
Это вполне логично, потому что как сравнить строку и список - совершенно непонятно. Поэтому метод sort в таких ситуациях нам не поможет.
3. Кастомная сортировкаХотите написать гибкий «сортер»? Для начала определите правило сортировки.
Несколько примеров таких правил:
* Сортируем по длине каждого элемента (число - длина 1, список - определяем длину списка)
* Если элемент простой (например, число), то берем его строковое отображение. Если элемент составной (например, список), то берем строковое отображение первого элемента
* Каждый элемент отображаем в виде строки и сортируем в лексикографическом порядке
* Сортируем по типам и по-отдельности для каждого типа данных
Пример реализации последнего подхода:
arr = ['s', 'p', [1], [2, 3], 'isok', 2]
# создаем словарь, разбивая все по типам данных
res = {}
for el in arr:
el_type = type(el)
if el_type not in res:
res[el_type] = []
res[el_type].append(el)
# сортируем для каждого типа отдельно
for k, v in res.items():
res[k] = sorted(v)
# формируем итоговый список
res = [el for subarr in res.values() for el in subarr]
print(res)
# ['isok', 'p', 's', [1], [2, 3], 2]
Здесь уже все зависит от вашей фантазии и навыков программирования
- - - - -
► Задачки по Python и не только: IT Resume
1.6K views17:08