← Все вопросы

Как проверить, отсортирован ли список?

Задан 15 месяцев назад391 просмотров3 ответа
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 месяцев назад

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект