Может ли кто-нибудь помочь мне исправить этот код сортировки списка?

#python

#python

Вопрос:

Когда я запускаю этот код, он ничего не печатает? Я пытался инвертировать значение больше, чем меньше, но это не помогает.

 def is_sorted(numbers):
    ''' Return whether or not the list of numbers is sorted '''

    for i in numbers:
        if numbers[i] < numbers[i   1]:
            print('True')
        else:
            print('False')
  

Комментарии:

1. Все, что делает этот код, это определяет функцию — почему вы ожидаете, что она что-нибудь напечатает? На самом деле вам нужно было бы вызвать эту функцию, передав некоторый список чисел в качестве параметра, чтобы что-нибудь произошло.

2. Обе проблемы с этим кодом являются давними дубликатами. Поскольку другие уже объяснили обе проблемы, я просто верю, что ваши проблемы решены, и проголосую за удаление этого сообщения.

Ответ №1:

for i in numbers в данном случае i это само число, а не индекс каждого числа. Это было for i in range(len(numbers)) бы, хотя тогда [i 1] выходило бы за пределы последней итерации.

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

 def is_sorted(numbers):
    return all(i <= j for i, j in zip(numbers, numbers[1::]))
  

Например

 >>> is_sorted([1,3,5,7])
True
>>> is_sorted([1,6,2,7,3])
False
  

Ответ №2:

Что-то вроде этого должно работать:

 def is_sorted(numbers):
    isSorted = True
    for i in numbers:
        try:
            if i > numbers[numbers.index(i) 1]:
                isSorted = False
        except:
            pass
    return isSorted
    
print(is_sorted([1,2],3,9,3))
  

Вы должны добавить переменную, isSorted , потому что if i > next number , она будет печатать False , но if i < next number , она будет печатать True . Вам нужно try и except , потому что, если была ошибка, если она была на последнем номере, она была бы проигнорирована. Вам также необходимо изменить i > numbers[i 1] на i > numbers[numbers.index(i) 1] , потому что для получения следующего числа нам нужно добавить 1 к индексу, а не к значению.