Нужна помощь в понимании Python Nested For Loop - PullRequest
0 голосов
/ 06 марта 2019

У меня проблемы с пониманием второго цикла for в приведенном ниже коде:

di = [4,5,6]
for i in range(len(di)):
    total = di[i]
    for j in range(i+1,len(di)):
        total += di[j]
        curr_di = total / ((j-i+1)**2)

Я не могу представить, что происходит в for j in range(i+1,len(di)):, в частности, часть i+1 смущает меня.Как влияет i в первом цикле на второй цикл, если таковой имеется?

Ответы [ 2 ]

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

Это типичная петля "комбинации из 2". Каждый элемент в списке (индекс i) обрабатывается с каждым последующим элементом (индекс j).

Похоже на обработку последовательности для вычисления суммы частичных сумм:

всего = ∑ (i = 1..n) (∑ (j = i..n) a [j])

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

Первый цикл просто перебирает все индексы , доступные в списке di. Для каждой записи в этом цикле второй цикл затем проверяет оставшиеся части di.

Итак, на первой итерации мы изучаем значение 4. Затем второй цикл будет проходить по списку, начиная с этой позиции и заканчивая до конца (он будет проверять элементы 5 и 6).

На второй итерации мы рассмотрим запись 5, а затем пройдем остаток списка во втором цикле (в данном случае 6). Имеет смысл?

Как отметил комментатор, печатные заявления - ваш друг. Вот пример с некоторыми операторами печати, чтобы показать, как i и j изменяются:

di = [4,5,6,7]
for i in range(len(di)):
  print(f"i: {i}")
  total = di[i]
  for j in range(i+1, len(di)):
    print(f" - j: {j}")
    total += di[j]
    curr_di = total / ((j-i+1)**2)

Выход:

i: 0
 - j: 1
 - j: 2
 - j: 3
i: 1
 - j: 2
 - j: 3
i: 2
 - j: 3
i: 3
...