Python理解。将vaule分配给矩阵,循环索引

时间:2017-12-14 10:47:14

标签: python numpy list-comprehension

我现在想要在理解中有办法做到这一点。

我有一个用零填充的矩阵(NxN)

indx = [(3, 3), (4, 3), (4, 4), (3, 4), (2, 4), (2, 3), (2, 2), (3, 2), (4, 2), (5, 2), (5, 3), (5, 4), (5, 5), (4, 5), (3, 5), (2, 5), (1, 5), (1, 4), (1, 3), (1, 2), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (5, 6), (4, 6), (3, 6), (2, 6), (1, 6), (0, 6), (0, 5), (0, 4), (0, 3), (0, 2), (0, 1), (0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (6, 0)]

我有一个元组列表,以螺旋模式给出了这个矩阵的索引。

for i in indx[0:7]:
    control[i] = 1

我的代码如下:

[control[i] = 1 for i in indx[0:7]]

我试图使用:

[control[i] = 1 for i in indx[0:7]]
                ^
SyntaxError: invalid syntax

但它给了我这个错误:

[[0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0]
 [0 0 1 1 1 0 0]
 [0 0 0 1 1 0 0]
 [0 0 0 1 1 0 0]
 [0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0]]

预期结果:

{{1}}

在理解中有没有办法做到这一点?

提前致谢!

1 个答案:

答案 0 :(得分:0)

免责声明:理解旨在构建新的列表,将副作用用于副作用被视为不良样式,因为它会混淆代码并创建一个无用的一次性容器,需要进行垃圾回收。

话虽如此,严格回答你的问题是否有可能做你想做的理解,你可以*但你不应该这样做:

[control.__setitem__(i, 1) for i in indx[0:7]]

这会让你受到正确的打击。你为这个无用的列表创建了什么?

*如果您原来的for循环没有抛出IndexError,那就是。