Python 如何向列表中已存在的列表中插入值?
我想创建一个尚未存在的列表。因此,我想使用insert函数在该列表中插入“0”作为新元素 问题是我不知道如何访问嵌套列表中元素位置的索引 我已尝试使用:Python 如何向列表中已存在的列表中插入值?,python,Python,我想创建一个尚未存在的列表。因此,我想使用insert函数在该列表中插入“0”作为新元素 问题是我不知道如何访问嵌套列表中元素位置的索引 我已尝试使用:matrix\u result[i1]。insert(i2,0) 但是这对我没有帮助,因为这一行,程序给出了一个错误。 完整代码: matrix1 = [[1, 5], [6, 4]] matrix2 = [[3, 2], [7, 8]] matrix_result = [] def add(p1, p2): global matri
matrix\u result[i1]。insert(i2,0)
但是这对我没有帮助,因为这一行,程序给出了一个错误。
完整代码:
matrix1 = [[1, 5], [6, 4]]
matrix2 = [[3, 2], [7, 8]]
matrix_result = []
def add(p1, p2):
global matrix_result
for i1 in range(0, len(p1)):
matrix_result.insert(i1,0)
for i2 in range(0, len(p1[i1])):
matrix_result[i1].insert(i2, 0)
matrix_result[i1][i2] = p1[i1][i2] + p2[i1][i2]
return matrix_result
print(add(matrix1, matrix2))
预期结果:矩阵_结果与矩阵x1中的元素数量相同,但所有元素的值均为0
实际结果:错误,因为语句:matrix\u result[i1]。插入(i2,0)
我想创建一个尚未存在的列表。因此,我想使用insert函数在该列表中插入“0”作为新元素
无法插入到不存在的列表中。您必须先使用[]
创建列表,然后才能在其中插入内容
解决方案:在你说的矩阵\u result.insert(i1,0)
的那一行,你插入一个int
,而不是列表
。要插入空的列表
,必须说出矩阵\u result.insert(i1,[])
编辑:正如Jondiedoop所说,通常建议使用
numpy
库进行矩阵运算,因为它经过高度优化且易于使用。转到此处了解更多信息:对于所有矩阵操作,请使用numpy
-库:
import numpy as np
np.array(matrix1) + np.array(matrix2)
输出:
#array([[ 4, 7],
# [13, 12]])
除了更简单、更灵活之外,它还将更快。您的空列表
矩阵\u结果
给解释器带来了一些挑战。我对您的代码做了一些更改,矩阵添加了
matrix1 = [[1, 5], [6, 4]]
matrix2 = [[3, 2], [7, 8]]
matrix_result = [[0,0], [0,0]] # CHANGE: empty array is now zeroes
def add_matrix(p1, p2):
global matrix_result
for i1 in range(0, len(p1)):
for i2 in range(0, len(p1[i1])):
matrix_result[i1][i2] = 0 # change: no .insert(), just assignment. you can (and probably should) remove this line.
matrix_result[i1][i2] = p1[i1][i2] + p2[i1][i2]
return matrix_result
print(add_matrix(matrix1, matrix2))
我希望这对你有帮助 更改矩阵结果以包含列表列表。解决方案中的另一个问题是,您正在访问保存在列表
matrix\u result[i1]
中的int类型,并试图插入int类型,而使用insert(i2,0)
虽然此处不一定需要insert()
,但如果确实需要,下面是代码的更新版本
matrix1 = [[1, 5], [6, 4]]
matrix2 = [[3, 2], [7, 8]]
matrix_result = [[],[]]
def add1(p1, p2):
global matrix_result
for i1 in range(0, len(p1)):
for i2 in range(0, len(p1[i1])):
matrix_result[i1].insert(i2,0)
matrix_result[i1][i2] = p1[i1][i2] + p2[i1][i2]
return matrix_result
print(add1(matrix1, matrix2))
我认为您不需要在此处使用
insert()
。更简单的方法是使用:
您还可以使用列表理解:
def add(*args):
return [[x + y for x, y in zip(*pair)] for pair in zip(*args)]
如果您试图实现矩阵加法,我假设您需要以下行为:
# m1 = [[1, 5], [6, 4]]
# m2 = [[3, 2], [7, 8]]
# add(m1, m2) => [[4, 7], [13, 12]]
如果不能使用任何库,可以使用zip和map,其中我们还假设矩阵的维度是相同的:
def add(p1, p2):
adder = lambda tuple: [tuple[0][i] + tuple[1][i] for i in range(len(tuple[1]))]
return list(map(adder, zip(p1, p2)))
print(add(matrix1, matrix2))
# [[4, 7], [13, 12]]
最简单、最快的方法是使用numpy:
import numpy as np
def add(p1, p2):
return np.array(p1) + np.array(p2)
确切的错误是什么?是否要添加列表或将其设置为0?请提供预期的output@WarpDriveEnterprisesAttributeError:'int'对象没有属性'insert'@Ayxan预期输出:[[4,7],[13,12]]感谢您在评论中提供额外信息!您可以通过将此信息合并到问题中来改进您的问题。如果您已经将矩阵值初始化为
matrix\u result=[[0,0],[0,0]]
@mad\uyeah,则可能不需要这一行“matrix\u result[i1][i2]=0”。在原始代码中,有人试图将其设置为0。我不知道这是否是后来的一个功能,所以我留下了它。不过,我确实评论说它可以被删除。
def add(p1, p2):
adder = lambda tuple: [tuple[0][i] + tuple[1][i] for i in range(len(tuple[1]))]
return list(map(adder, zip(p1, p2)))
print(add(matrix1, matrix2))
# [[4, 7], [13, 12]]
import numpy as np
def add(p1, p2):
return np.array(p1) + np.array(p2)