使用 Python 且不使用 NumPy 的二维数组元素计算

2D array element calculation using Python and without NumPy

我有一个二维数组来为每个元素做一些计算,格式如下:

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

我计算后的预期结果如下:

a_new = [[2, 6, 3], [5, 12, 6], [8, 18, 9]]

我写了以下代码:

f = 1
g = 2
a_1 = [c +f, (d+f)*g, e for (c, d, e) in array] #I expect this can bring the results to form the format I want.

但是,它有错误信息:

SyntaxError: invalid syntax

如何修改代码得到我想要的结果?而且我也不想导入和使用 NumPy 进行计算。

c +f, (d+f)*g, e 定义一个 tuple 并且您在执行时没有问题:

my_tuple = c +f, (d+f)*g, e

但是在列表理解语法中,你需要使用括号保护元组以允许解析,否则python不知道参数何时停止:

a_1 = [(c +f, (d+f)*g, e) for (c, d, e) in a]

我得到:

[(2, 6, 3), (5, 12, 6), (8, 18, 9)]

请注意,您预期的输入显示的是列表,所以也许您想要的更多:

a_1 = [[c +f, (d+f)*g, e] for (c, d, e) in a]

方括号就可以了:

array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
f = 1
g = 2
a_1 = [[c +f, (d+f)*g, e] for (c, d, e) in array]

结果:

a_1
[[2, 6, 3], [5, 12, 6], [8, 18, 9]]

如果你希望你的结果数组是 a_new = [[2, 6, 3], [5, 12, 6], [8, 18, 9]] 如您的问题所述,那么您需要用方括号保护列表理解中的内部操作。

a_new = [[c+f,(d+f)*g,e] for (c,d,e) in a]

您收到无效语法错误,因为您需要将 c+f,(d+f)*g,e 括在方括号中以便 Python 识别该操作。

其他一些人指出您也可以使用圆括号代替方括号。虽然这不会导致错误,但也不会产生您要查找的数组。

如果您使用方括号,您将得到一个列表列表:

[[2, 6, 3], [5, 12, 6], [8, 18, 9]]

如果您使用括号,您将得到一个元组列表:

[(2, 6, 3), (5, 12, 6), (8, 18, 9)]