В основном меня смущает введение [k]
в уравнение, поскольку я не знаю, как он меняет список.
someList[k]
является item accessor для k
го элемента списка. Поэтому для списка a = [2, 3, 5, 7]
, a[k]
вернет k-ое число. Например:
>>> a = [2, 3, 5, 7]
>>> a[0]
2
>>> a[1]
3
>>> k = 3
>>> a[k]
7
Использование только одного аксессуара просто прочитает значение, не затрагивая список. Однако Python также позволяет присвоить ему значение. Это изменит элемент в списке на тот индекс:
>>> a = [2, 3, 5, 7]
>>> a[2]
5
>>> a[2] = 13 # we change the value
>>> a[2]
13
>>> a # the original list was modified
[2, 3, 13, 7]
Так что в вашем цикле, когда вы a[k] = a[k] + something
, вы получите значение в индексе -го, добавьте something
к нему, а затем обновить первоначальный перечень на тот же индекс. Поскольку параметры функции передаются по ссылкам, это обновляет исходный список (и вы позже возвращаете идентичный объект списка из своей функции).
Что касается части «что-то», вы делаете это: b[len(b)-1-k]
. Опять же, вы используете индекс для доступа к одному элементу списка b
. Но на этот раз индекс не является константой или одной переменной, а более сложным выражением: len(b) - 1 - k
. len(b)
вернет длину списка b
, так что предельно, поскольку вы перебираете список a
с самого начала, вы делаете итерацию b
с конца (при условии, что для обоих списков одинаковая длина). Сначала Python выполнит выражение, поэтому в конце он получит доступ к элементу b в индексе, который возникает из этого выражения.
Я не понимаю ваш вопрос. Что вы подразумеваете под «выполнением функции из строки за строкой»? – poke
Посмотрите, как Python смотрит на код и выполняет его. –