Member 13911588 Ответов: 3

Почему Python range() в цикле for работает дважды


Я использую python range() с for loop, но ситуация-это 2 цикла, ожидайте, что внешний цикл запустится один раз, затем inter loop запустится полностью, а затем внешний цикл запустится 2-й... вопрос: почему внешний цикл запускается дважды, прежде чем внутренний цикл получает шанс запустить?

Что я уже пробовал:

def sort(a_list):
    for i in range(1,len(a_list)):
        print("i=",i)
        for j in range(i-1,0,-1):
            print("j=",j)


Test: L=[9,6,1,3]


сортировка(L)

Результат:

i= 1
i= 2   # here, the outer lopp ran twice then inter loop began.
j= 1
i= 3
j= 2
j= 1

3 Ответов

Рейтинг:
21

Dave Kreskowiak

Если вы хотите точно узнать, как работает этот код, используйте отладчик. Он предназначен для отладки вас и вашего понимания кода.

Оказывается, что i цикл выполняется дважды подряд, потому что это не так. Внутреннее j цикл выполняется, но range возвращает массив значений из i - 1 до 0, причем верхний предел 0 не является включительным.

На первой итерации i- это было бы ... range(1 - 1, 0, -1), который не вернет никаких значений для j петля.

Это ожидаемое поведение.


Рейтинг:
2

Richard MacCutchan

Посмотрите на значения вашего внутреннего цикла. При первом запуске переменная i имеет значение 1. Таким образом, цикл не будет выполняться, так как i - 1 равен нулю, и цикл определен для выполнения от нулевых значений до нуля.


Рейтинг:
1

Patrice T

Цитата:
почему внешний цикл запускается дважды, прежде чем внутренний цикл получает шанс запустить?

Для получения хорошего объяснения ознакомьтесь с документацией:
4. встроенные типы — документация Python 3.7.0[^]