用Python中的相同列表减去列表中的列表

时间:2018-06-19 12:16:37

标签: python arrays python-3.x list list-comprehension

我的列表如下:

A=[[1,2,3],[4,5,6],[7,8,9]]

现在我想用B减去A中的所有列表

B=[1,1,1]

获得以下结果C:

C=[[0,1,2],[3,4,5],[6,7,8]]

我知道我可以使用zip进行两个列表减法,但是我不能在列表中的列表上直接使用它。我该如何减去?谢谢

4 个答案:

答案 0 :(得分:3)

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]])

答案 1 :(得分:2)

使用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]]

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这是不使用NUMPY的另一种方法-

for innerList in A:
    newInner = []
    for j in range(0, len(innerList)):
        newInner.append(innerList[j] - B[j])
    C.append(newInner)