Давайте рассмотрим следующую функцию sumlists
, которая «выравнивает» числовые двумерные списки, беря сумму значений в каждой строке, которые больше 1
:
def sumlists(lst):
new_lst = []
for i in range(len(lst)):
sum_ = 0
for j in range(len(lst[i])):
if lst[i][j] > 1:
sum_ += lst[i][j]
new_lst.append(sum_)
return new_lst
Например, , если lst
равно:
lst = [
[1, 2, 3],
[4, 5, 1, 6],
[7, 1]
]
, результат будет:
[5, 15, 7]
Функция имеет два вложенных цикла for
с индексами i
и j
для прохождения lst
строк и столбцов соответственно. Прежде чем перейти к значениям в каждой строке, нам нужно определить переменную, в данном случае sum_
, для хранения суммы до значения jth в строке ith . Условие if lst[i][j] > 1:
запрещает добавление любого числа меньше 2
к sum_
. Наконец, когда все значения в строке ith пройдены, полученная сумма добавляется в «плоский» список (new_list
). С этим давайте разберем всю эту информацию, чтобы перейти от определения функции к пониманию списка.
Шаг 1. Строка для l oop:
arr[i] for i in range(len(arr))
Шаг 2. столбец для l oop:
arr[i][j] for j in range(len(arr[i]))] for i in range(len(arr))
Шаг 3. Условие ради суммы, значения больше единицы возвращаются, в противном случае 0:
arr[i][j] if arr[i][j] > 1 else 0 for j in range(len(arr[i]))] for i in range(len(arr))
Шаг 4. sum: sum: добавление всех значений в [arr[i][j] if arr[i][j] > 1 else 0 for j in range(len(arr[i]))]
sum([arr[i][j] if arr[i][j] > 1 else 0 for j in range(len(arr[i]))]) for i in range(len(arr))
Шаг 5. добавьте суммы к new_lst
:
↓ here ↓ here
[sum([arr[i][j] if arr[i][j] > 1 else 0 for j in range(len(arr[i]))]) for i in range(len(arr))]
Я надеюсь, что это отвечает на ваш вопрос.