Python理解。给矩阵赋值,循环索引

2024-04-19 14:20:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在想知道是否有一种方法可以在理解中做到这一点。你知道吗

我有一个矩阵(NxN)充满了零

control = np.zeros((7,7), dtype=np.int)
print control

array([[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, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0]])

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

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

在理解中有没有办法做到这一点?你知道吗

提前谢谢!你知道吗


Tags: 方法in列表fornpzeros矩阵array
1条回答
网友
1楼 · 发布于 2024-04-19 14:20:20

免责声明:理解的目的是建立新的列表,使用它们的副作用被认为是坏的风格,因为它混淆了代码,并创建了一个无用的一次性容器,需要垃圾收集。你知道吗

也就是说,严格地回答你的问题如果你能理解你想做的事情,你可以*但你不应该做:

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

这会让你受到应有的惩罚。你为什么要创建那个无用的列表?你知道吗

*如果您原来的for循环没有抛出IndexError,也就是说。你知道吗

相关问题 更多 >