Это обычный код, который я писал, и этот код имеет желаемый результат, который я хотел

a = [1,1,2,3,5,8,4,13,21,34,55,89]
less5num = []
for i in a:
    if i < 5:
        less5num.append(i)
        less5num.sort()
print(less5num)

Output
[1, 1, 2, 3, 4]

Теперь, если я продолжаю печатать внутри цикла if, я получаю числовую пирамиду

a = [1,1,2,3,5,8,4,13,21,34,55,89]
less5num = []
for i in a:
    if i<5:
        less5num.append(i)
        less5num.sort()
        print(less5num)

Output
[1]
[1, 1]
[1, 1, 2]
[1, 1, 2, 3]
[1, 1, 2, 3, 4]

Если я оставлю печать вне цикла if, я получу рекурсивную числовую пирамиду

a = [1,1,2,3,5,8,4,13,21,34,55,89]
less5num = []
for i in a:
    if i<5:
        less5num.append(i)
        less5num.sort()
    print(less5num)

Output
[1]
[1, 1]
[1, 1, 2]
[1, 1, 2, 3]
[1, 1, 2, 3]
[1, 1, 2, 3]
[1, 1, 2, 3, 4]
[1, 1, 2, 3, 4]
[1, 1, 2, 3, 4]
[1, 1, 2, 3, 4]
[1, 1, 2, 3, 4]
[1, 1, 2, 3, 4]

Почему это происходит?

0
EON 18 Янв 2022 в 17:52

4 ответа

a = [1,1,2,3,5,8,4,13,21,34,55,89]
less5num = []
for i in a:
    if i<5:
        less5num.append(i)
        less5num.sort()
    # this print in loop but outside if statement
    print(less5num)

Ваша печать находится в цикле, но вне оператора if. Поэтому все итерации выводятся в консоль

1
Andrei Gurko 18 Янв 2022 в 17:56

В вашем первом блоке кода печать не находится внутри цикла for, она выполняется после повторения всех элементов, только числа меньше 5 добавляются в список и сортируются.

Во втором блоке кода печать находится внутри loop, а также выполняется, только если число меньше 5, поэтому печатается меньшее количество раз выполняется.

В вашем 3-м блоке кода ваша печать находится в for loop, но не в блоке if, поэтому, когда встречается каждый элемент, происходит печать, поэтому столько раз, сколько есть чисел в вашем списке.

0
Anand Sowmithiran 18 Янв 2022 в 17:57

Если print находится вне цикла, он печатает список один раз со всеми числами меньше 5.

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

Если он находится внутри цикла, вы печатаете его один раз для каждого числа в цикле.

Вы можете визуализировать его, используя pythontutor.

0
Bharel 18 Янв 2022 в 17:58

Сначала, если

В списке 5 элементов меньше 5, поэтому вы печатаете его 5 раз.

[1,1,2,3,4]

Второй, если

Цикл заканчивается после того, как все значение в списке. В списке 12 элементов, поэтому вы печатаете его 12 раз.

[1,1,2,3,5,8,4,13,21,34,55,89]
0
Jdam0xff 18 Янв 2022 в 18:02