Python 如何向列表中已存在的列表中插入值?

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

我想创建一个尚未存在的列表。因此,我想使用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 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)