У меня есть список, как показано ниже:
A=[[1,2,3],[4,5,6],[7,8,9]]
Теперь я хотел бы вычесть все списки в с B
B=[1,1,1]
для получения следующего результата: C:
C=[[0,1,2],[3,4,5],[6,7,8]]
Я знаю, что я могу использовать zip для вычитания двух списков, но я не могу использовать его непосредственно в списке в списке. Как я могу сделать вычитание выше? Спасибо
Использование представления списка с помощью zip
:
C = [[a-b for a, b in zip(sublist, B)] for sublist in A]
В качестве альтернативы, используя подсчет списка с enumerate
:
C = [[j-B[i] for i, j in enumerate(sublist)] for sublist in A]
Используя стороннюю библиотеку NumPy, вы можете использовать широковещательную передачу для вывода массива:
import numpy as np
A = np.array([[1,2,3],[4,5,6],[7,8,9]])
B = np.array([1,1,1])
C = A - B
print(C)
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
Использование numpy
.
Демо - версия:
import numpy as np
A=[[1,2,3],[4,5,6],[7,8,9]]
B=[1,1,1]
C = [list(np.array(i) - np.array(B)) for i in A]
print(C)
Использование operator.sub
from operator import sub
A=[[1,2,3],[4,5,6],[7,8,9]]
B=[1,1,1]
C = [list(map(sub, i, B)) for i in A]
print(C)
Выход:
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
Вот альтернативный подход без использования NUMPY -
for innerList in A:
newInner = []
for j in range(0, len(innerList)):
newInner.append(innerList[j] - B[j])
C.append(newInner)
import operator
A=[[1,2,3],[4,5,6],[7,8,9]]B=[1,1,1]
B=[1,1,1]
C=[list(map(operator.sub, i,B)) for i in A]
print C