gpt4 book ai didi

python - 通过列表理解创建矩阵时的冗余变量

转载 作者:行者123 更新时间:2023-11-28 21:27:46 24 4
gpt4 key购买 nike

我正在尝试用零填充我的矩阵。不幸的是,在下面的示例中,变量 xy 是多余的:

self.matrix = [[0 for x in range(0, self.N)] for y in range(0, self.N)]

乘法列表,仅复制引用当然不是我所期望的:

>>> matrix = [[0] * 5] * 5
>>> matrix
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
>>> matrix[1][1] = "X"
>>> matrix
[[0, 'X', 0, 0, 0], [0, 'X', 0, 0, 0], [0, 'X', 0, 0, 0], [0, 'X', 0, 0, 0], [0, 'X', 0, 0, 0]]

那么,是否有任何解决方案使用列表理解来避免冗余变量(x & y)?

最佳答案

常见的习惯用法是将结果分配给变量 _,这会向可能阅读您代码的人发出信号,表明该值不会被使用:

[[0]*self.N for _ in range(self.N)]

如您所见,我们可以对内部列表使用 [0]*size 习惯用法,因为 0 是一个不可变值。此外,您可以仅使用一个参数调用 range,在这种情况下,它被视为上限,0 为下限)。

如果需要,您可以自己构建一个支持创建任意嵌套深度列表的列表构建助手:

def make_multi_list(dim, func):
if not dim: return func()
return [make_multi_list(dim[1:], func) for _ in range(dim[0])]

用法:

>>> make_multi_list((2, 2), lambda: 0)
[[0, 0], [0, 0]]
>>> make_multi_list((3, 2, 1), lambda: 0)
[[[0], [0]], [[0], [0]], [[0], [0]]]

关于python - 通过列表理解创建矩阵时的冗余变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9960736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com