Как выполнять математические функции в списках в списке - PullRequest
0 голосов
/ 25 июня 2018

Я очень плохо знаком с python (использую python3) и пытаюсь добавить числа из одного списка в другой.Единственная проблема заключается в том, что второй список представляет собой список списков.Например:

[[1, 2, 3], [4, 5, 6]]

Я хочу добавить, скажем, 1 к каждому элементу в первом списке и 2 к каждому элементу во втором, возвращая что-то вроде этого:

[[2, 3, 4], [6, 7, 8]]

Я пробовал это:

original_lst = [[1, 2, 3], [4, 5, 6]]
trasposition_lst = [1, 2]
new_lst = [x+y for x,y in zip(original_lst, transposition_ls)]
print(new_lst)

Когда я это делаю, я получаю сообщение об ошибке

может только объединить список (не "int") в список

Это наводит меня на мысль, что я не могу работать таким образом со списками, пока они вложены в другой список.Я хочу сделать эту операцию без выравнивания вложенного списка.Есть ли решение?

Ответы [ 5 ]

0 голосов
/ 25 июня 2018

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

lst = [[1, 2, 3], [4, 5, 6, 7]]
c = [1, 2]
res = [[l + c[i] for l in lst[i]] for i in range(len(c))]
0 голосов
/ 25 июня 2018

Вы были очень близки с вами оригинальным методом.Просто упал на шаг.

Небольшое добавление

original_lst = [[1, 2, 3], [4, 5, 6]]
transposition_lst = [1, 2]
new_lst = [[xx + y for xx in x] for x, y in zip(original_lst, transposition_lst)]
print(new_lst)

Выход

[[2, 3, 4], [6, 7, 8]]

Рассуждение

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

В:

original_lst = [[1, 2, 3], [4, 5, 6]]
transposition_lst = [1, 2]
for x,y in zip(original_lst, transposition_lst):
    print(x, y)

Вывод

[1, 2, 3] 1
[4, 5, 6] 2

Теперь это легковидите, что вы пытаетесь добавить целое число в список (отсюда и ошибка).Какой питон не понимает.если бы они были оба целыми числами, они бы добавили их, или если бы они были обоими списками, они бы объединили их.

Чтобы исправить это, вам нужно сделать один дополнительный шаг с вашим кодом, чтобы добавить целое число к каждому значению в списке.Отсюда добавление дополнительного понимания списка в решении выше.

0 голосов
/ 25 июня 2018

Вы можете использовать enumerate:

l = [[1, 2, 3], [4, 5, 6]]
new_l = [[c+i for c in a] for i, a in enumerate(l, 1)]

Выход:

[[2, 3, 4], [6, 7, 8]]
0 голосов
/ 25 июня 2018

Почему бы вместо этого не использовать numpy?

import numpy as np
mat = np.array([[1, 2, 3], [4, 5, 6]])
mul = np.array([1,2])
m = np.ones(mat.shape)
res = (m.T *mul).T + mat
0 голосов
/ 25 июня 2018

Один подход с использованием enumerate

Демо:

l = [[1, 2, 3], [4, 5, 6]]
print(  [[j+i for j in v] for i,v in enumerate(l, 1)] )

Выход:

[[2, 3, 4], [6, 7, 8]]
...