【问题标题】:Loop over star shape in grid循环网格中的星形
【发布时间】:2020-07-03 03:53:31
【问题描述】:

我正在使用 python 3, 我有一个 9 * 9 的列表或网格,左上角是 (0, 0),右下角是 (8, 8)

我只想遍历该网格上距中心 (4, 4) 4 个或更少单元格的每个项目,

并对该单元格执行操作。

这是我当前的代码(不工作)-

for row in range(9):
    amount = row * 2 + 1
    for col in range(9):
        if amount == 0:
            continue
        print("Col- ", col + 4 -(row % 4), "Row- ", row)
        amount -= 1

【问题讨论】:

  • 添加了我当前的代码

标签: python python-3.x list arraylist


【解决方案1】:

我只成功地循环了蓝色方块,这是我的代码:

import numpy as np


def index_generator(grid_dim):
    center = grid_dim//2
    dx = center + 1
    sx = center

    while(dx > 0 and sx < grid_dim):
        dx -= 1
        sx += 1
        yield range(dx, sx)

    while(dx <= (center) and sx >= (center + 1)):
        dx += 1
        sx -= 1
        yield range(dx, sx)


grid_dim = 9

A = np.zeros((grid_dim, grid_dim))

for r, i in zip(index_generator(grid_dim), range(grid_dim)):
    for j in r:
        A[i, j] = 1

print(A)

输出是:

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

我使用生成器来构造每一行的索引,然后循环遍历它,在第一部分中,我找到了中心并声明了两个分隔符(sx 和 dx)。比我循环移动分隔符,直到它到达矩阵的边界,然后我只是做同样的事情,但向中心移动。

希望对您有所帮助。

【讨论】:

  • 我使用 numpy 只是为了方便声明矩阵,它应该是微不足道的。
  • 哇,太聪明了,我认为也许可以使用更短的解决方案,但这也很棒,非常感谢! :D
猜你喜欢
  • 2017-12-22
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-19
  • 1970-01-01
  • 2020-08-01
  • 2022-01-03
相关资源
最近更新 更多