Не понимаю, вложенный For Loop в Python - PullRequest
0 голосов
/ 06 марта 2019

Я не понимаю, как работает i во втором цикле for приведенного ниже кода.

di = [96, 15, 33, 87]
for i in range(len(di)):
    total = di[i]
    for j in range(i+1,len(di)):
        print(i)
0
0
0
1
1
2

Почему вывод 0,0,0,1,1,2. Как я во втором цикле for влияет на первый цикл? Есть ли наследство? Простите новичка здесь.

Ответы [ 3 ]

0 голосов
/ 06 марта 2019

Чтобы помочь вашему пониманию, попробуйте это:

di = [96, 15, 33, 87]
for i in range(len(di)):
    print("first loop, i =", i)
    total = di[i]
    for j in range(i+1,len(di)):
        print("second loop, j =", j)
        print("second loop, i =", i)

Значение i одинаково в обоих циклах. каждый раз, когда запускается внешний цикл, он запускает внутренний цикл до тех пор, пока не завершится оператор for.

0 голосов
/ 06 марта 2019

len(di) равно 4. Таким образом, цикл

for i in range(len(di)):

будет повторяться 4 раза.Из-за способа работы range (от нижней границы, которая по умолчанию равна 0, если не указано, до 1 ниже верхней границы), i будет 0 в первом повторении, 1 во втором повторении, и так далее.Чтобы вычислить, сколько объектов range(x, y) генерирует, в этом случае, как часто for i in range(x, y) будет повторяться, вы можете просто сделать number of repetitions = y - x.Таким образом, в этом случае: len(di) - 0 (default lower bound) = 4.

Цикл

for j in range(i+1, len(di)):
    print(i)

будет повторять команду print(i) len(di) - (i + 1) раз.Имейте в виду, i определяется внешней петлей.Таким образом, во время первого цикла

for i in range(len(di)):

i равно 0, поэтому команда print(i) будет выполнена 4 - (0+1) = 3 раз - она ​​напечатает i(=0) 3 раза.Во втором цикле i равно 1, поэтому оно будет напечатано 2 раза и так далее.Итак, вот что происходит, отформатировано как код для лучшей читаемости:

First outer loop: 
i = 0
total = di[i] = di[0] = 96
--> first inner loop of first outer loop:
    j = i + 1 = 1
    i is printed -> prints 0

    second inner loop of first outer loop:
    j = j+1 = 2
    i is printed -> prints 0 again

    third inner loop of first outer loop:
    j = j+1 = 3 --> since len(di) = 4, the upper bound of range(i+1, len(di)) is reached, so this is the last Repetition
    i is printed -> prints 0 again

Second outer loop:
i = 1
total = di[1] = 15
--> first inner loop of second outer loop:
    j = i+1 = 2
    i is printed -> prints 1

    second inner loop of second outer loop:
    j = i+1 = 3  -> upper bound of range reached, last repetition
    i is printed -> prints 1 again

Third outer loop:
i = 2
total = di[2] = 33
--> first inner loop of third outer loop:
    j = i+1 = 3  -> upper bound of range is reached, only Repetition
    i is printed -> prints 2

Fourth (and final) outer loop:
i = 3 -> upper bound of range(len(di)) reached, last Repetition
total = di[3] = 87
since j = i+1 = 4, the inner loop does not get executed at all (both bounds of range are equal), so 3 doesn't get printed

end of code.
0 голосов
/ 06 марта 2019

На языке программирования переменная доступна для использования в области видимости.Когда вы начинаете цикл с новой переменной, он будет доступен для использования до тех пор, пока вы его не закончите.

Когда вы начинаете путешествие по изучению Python, одной из действительно полезных практик является чтение официального документа.https://docs.python.org/3/tutorial/controlflow.html

...