← Все вопросы
Как проверить, отсортирован ли список?
8
Хочу понять, упорядочен ли уже список по возрастанию, не сортируя его заново (чтобы не тратить время впустую). Есть ли встроенный способ?
3 ответа
15
Самый аккуратный способ — all по соседним парам:
def is_sorted(lst):
return all(lst[i] <= lst[i + 1] for i in range(len(lst) - 1))
Он ленивый: all остановится на первой же паре, где порядок нарушен, так что в худшем случае O(n), а часто и раньше. Сравнение all(a == b for a, b in zip(lst, sorted(lst))) тоже работает, но тратит O(n log n) на саму сортировку — для простой проверки это перебор.
6
Через all с zip: all(a <= b for a, b in zip(lst, lst[1:])).
4
Встроенного нет.
Вероника Морозова Есть `more_itertools.is_sorted`, если пакет уже стоит · 15 месяцев назад
Ваш ответ
Войдите, чтобы ответить на вопрос.