从另一个指定的矩阵更改矩阵的第一列

时间:2019-03-31 04:35:57

标签: python

我有2个矩阵

x = [[1,2,3],
     [4,5,6],
     [7,8,9]]
y = [0,2,4]

并且我想使用矩阵y中的每个元素来更改矩阵x的每一行中的每个第一个元素,这样最终结果将是

x = [[0,2,3],
     [2,5,6],
     [4,8,9]]

我尝试过此代码

x = [[1,2,3],[4,5,6],[7,8,9]]
y = [0,2,4]
for i in range (len(x)):
    x[i][0] = y[0][i]

print (x)

但它仅返回“ TypeError:'int'对象不可下标”

有什么方法可以解决此问题,以及如何扩展它以使其适用于任何n * n矩阵?

3 个答案:

答案 0 :(得分:1)

x[i][0] = y[0][i]更改为x[i][0] = y[i]

使用更少的索引来完成此操作的另一种方法:

x = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
y = [0, 2, 4]

for x_row, y_int in zip(x, y):
    x_row[0] = y_int

print(x)

答案 1 :(得分:1)

您没有矩阵。 xlist中的lists,而ylist。它们可以表示矩阵/向量/等,但是它们最终都是数学抽象,可以用不同的方式在代码中实现。

第一种方法,即保持代码的结构,需要注意上述事实:由于y是包含listints的{​​{1}}显然将不起作用,因为y[0][i]始终是y[0],并且您不能进一步将下标运算符应用于int

因此,这将起作用:

ints

也就是说,这不是唯一的方法。如果您需要一种更实用的方法,则可以执行以下for i in range (len(x)): x[i][0] = y[i] 理解:

list

这给出了相同的结果,但是以更抽象的方式解决了这个问题:新的[[y_value, *x_value[1:]] for x_value, y_value in zip(x, y)] 本身将包含list,其中第一个元素来自lists,其余元素来自{ {1}}。了解了这一点,我们可以按照此模式组成一个内部列表。

yxzip创建值对的iterator。使用此迭代器,可以将x中每个值y放在y中每个值之前。最后,由于xlist,因此必须解压缩,这样我们得到的是x_value而不是list

答案 2 :(得分:0)

使用Python,通常会尽可能避免使用索引。由于“矩阵”实际上是列表的列表,因此遍历行将返回列表,这些列表是可以直接操作的对象引用:

for row,value in zip(x,y): row[0] = value