Почему список == "отсортировано" ключевое слово дает ложь - PullRequest
0 голосов
/ 12 ноября 2018

Когда я проверяю состояние этого списка a = [1,2,3,4,5] и этого списка [1,2,3,2,1,5,4] для ключевого слова 'sorted' означает

>> a == sorted
>> False

, почему это дает мне значение False и

>>a != sorted
>> True

, почемуэто дает мне правду?в «==» он возвращает «ложь», в «! =» - «истина», независимо от того, отсортирован ли список

Ответы [ 4 ]

0 голосов
/ 12 ноября 2018

Давайте посмотрим на это немного глубже:

sorted действительно является ключевым словом, но это не то, что вы думаете:

>>> type(sorted)
<class 'builtin_function_or_method'>

поэтому это выражение >>> a == sorted проверяет, равен ли ваш список a этому builtin_function_or_method, он не проверяет, отсортирован ли список.Вам нужно будет написать свою собственную проверку сортировки, например, как показано ниже:

def is_sorted(a=[]):
    prev = a[0]
    if len(a)>1:
        for item in a[1:]:
            if item < prev:
                return False
            else:
                prev=item
    return True

, а затем использовать эту функцию, чтобы сделать проверку следующим образом:

>>> is_sorted(a)
>>> True

или использовать sorted дляпо назначению:

a==sorted(a)
0 голосов
/ 12 ноября 2018

Функция sorted() берет список и возвращает его отсортированным.

Поэтому вы должны сравнить свой список с "отсортированной версией" этого списка, чтобы увидеть, был ли он изначально отсортирован.

Например,

>>> l = [1,2,3]
>>> l == sorted(l)
True
>>> l = [2,1,3]
>>> l == sorted(l)
False

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

0 голосов
/ 12 ноября 2018

sorted - это встроенная функция в Python.Списки и функции по своей сути несопоставимы, поэтому естественно, что a == sorted вернет false независимо от того, что в a.Вы можете проверить это с помощью функции type:

>>> print(type([1, 2, 3]))
<class 'list'>
>>> print(type(sorted))
<class 'builtin_function_or_method'>

Если вы хотите проверить «сортировку» в a, вы должны сделать:

a == sorted(a)

или,если вы предпочитаете что-то, что не выполняется за O (n log n):

all(first <= second for first, second in zip(a, a[1:]))
0 голосов
/ 12 ноября 2018

Вы неправильно поняли значение sorted. Это функция, которая возвращает отсортированный список, а не проверку того, отсортирован ли данный список. Для этого вы можете использовать что-то вроде a == sorted(a)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...