如何将值插入列表中已经存在的列表?

时间:2018-12-31 16:27:57

标签: python

我想创建一个尚不存在的列表。因此,我想使用插入功能将“ 0”作为该列表中的新元素插入。

问题是我不知道如何访问嵌套列表中元素位置的索引。

我尝试使用matrix_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))

预期结果:matrix_result具有与matrix1中一样多的元素,但所有元素的值为0

实际结果:由于以下语句而出错:matrix_result[i1].insert(i2, 0)

6 个答案:

答案 0 :(得分:3)

对于所有矩阵操作,请使用numpy库:

import numpy as np
np.array(matrix1) + np.array(matrix2)

输出:

#array([[ 4,  7],
#      [13, 12]])

除了更简单,更灵活之外,它还将更快。

答案 1 :(得分:2)

  

我想创建一个尚不存在的列表。因此,我想使用插入功能将“ 0”作为该列表中的新元素插入。

您不能插入到不存在的列表中。您必须先使用[]创建列表,然后才能在其中插入内容。

解决方案:在您说matrix_result.insert(i1, 0)的行上,插入int而不是list。要插入空的list,您必须说matrix_result.insert(i1, [])

编辑:正如Jondiedoop所说,通常建议将numpy库用于矩阵运算,因为它是高度优化且易于使用的。前往此处了解更多信息:NumPy.org

答案 2 :(得分:0)

您的空列表matrix_result给口译员带来了一些挑战。我对您的代码做了一些更改,并添加了矩阵。

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

希望对您有所帮助!

答案 3 :(得分:0)

更改matrix_result以包含列表列表。解决方案中的另一个问题是您正在访问保存在列表matrix_result[i1]中的int类型,并试图插入int类型,而使用insert(i2, 0)

是不可能的。
matrix1 = [[1, 5], [6, 4]]
matrix2 = [[3, 2], [7, 8]]
matrix_result = [[0,0],[0,0]]

def add1(p1, p2):
    global matrix_result

    for i1 in range(len(p1)):
            for i2 in range(len(p1[i1])):  
                matrix_result[i1][i2] = p1[i1][i2] + p2[i1][i2]
    return matrix_result
print(add1(matrix1, matrix2))

尽管您不一定需要在这里使用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))

答案 4 :(得分:0)

我认为您不需要在这里使用insert()。一种更简单的方法是使用zip()

matrix1 = [[1, 5], [6, 4]]
matrix2 = [[3, 2], [7, 8]]

def add(*args):
    matrix_result = []

    for pair in zip(*args):
        inner = []
        for x, y in zip(*pair):
            inner.append(x + y)
        matrix_result.append(inner)

    return matrix_result

print(add(matrix1, matrix2))
# [[4, 7], [13, 12]]

您还可以使用列表理解:

def add(*args):
    return [[x + y for x, y in zip(*pair)] for pair in zip(*args)]

答案 5 :(得分:0)

如果您要实现矩阵加法,我假设您需要以下行为:

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