否定2D数组中的所有列表值

问题描述 投票:0回答:1

以下两个版本的脚本按预期工作:

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


def negate(amatrix):
    for alist in matrix:
        for i in range(len(alist)):
            alist[i] = -alist[i]
    return amatrix

print(negate(matrix))

收益率:[[-1,2,-3],[4,-5,6],[ - 7,8,-9]]

和这个版本一样:

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


def negate(amatrix):
    newmatrix = []
    for alist in amatrix:
        newlist = [-x for x in alist]
        newmatrix.append(newlist)
    return newmatrix

print(negate(matrix))

我正在尝试使用理解来更改适当的值,就像第一个版本一样。

我有这个:

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


def negate(amatrix):
    for alist in matrix:
        alist = [-x for x in alist]
    return amatrix

print(negate(matrix))

第三个版本确实否定了每个列表中的各个值,但是更改没有保存在矩阵中,即我希望列表值在适当的位置发生变化。

有没有办法使用理解来否定单个列表值,或者我是否必须使用索引版本(上面的第一个版本)?

python arrays python-3.x numpy list-comprehension
1个回答
1
投票

列表推导不起作用。当你说x = [-i for i in x]时,首先评估右侧并分配给x。即使您将其分配给同一个变量,解决方案也不会就位。

您可能需要的是矢量就地解决方案。这是由qazxsw poi支持的:

numpy
© www.soinside.com 2019 - 2024. All rights reserved.