对于2维数组,我只希望特定元素为不同的数字。 如果数组不是固定的,并且更改了尺寸,那么如何用for循环遍历它以隐含模式呢?
0 0 0 0 1
0 0 0 0 1
0 0 1 0 1
0 0 1 0 1
1 0 1 0 1
0 0 0 0 0 0 1
0 0 0 0 0 0 1
0 0 0 0 1 0 1
0 0 0 0 1 0 1
0 0 1 0 1 0 1
0 0 1 0 1 0 1
1 0 1 0 1 0 1
这是我要创建的内容,但是我找不到在for循环中仅选择那些内容的方法。 任何帮助,将不胜感激。预先感谢!
rows, cols = (5,5)
arr = [[0 for i in range(cols)] for j in range(rows)]
for row in arr:
if row == 0 or row == 1:
print("h")
arr[rows-1, row] = 1
if row == 2 or row == 3:
arr[rows-1, row] = 1
if row == 4 or row == 5:
arr[rows-1, row] = 1
if row == 6 or row == 7:
arr[rows-1, row] = 1
print(arr)
这是我到目前为止所拥有的。
答案 0 :(得分:3)
可能的解决方案:
from pprint import pprint
n = 5
mat = [[0 for _ in range(n)] for _ in range(n)]
for i in range(n):
for j in range(n):
if i + j >= n - 1 and j % 2 == 0:
mat[i][j] = 1
pprint(mat)
一些小注释(实际上,最好在代码审查论坛中这样做):
n
),而无需定义两个rows
和cols
。假设n
也是奇数,则您的模式定义正确。 arr
并不是一个很好的名字,看到“数组”这个名字通常是指一维数组。在我看来,“矩阵”更适合[[mat
简而言之]。 pprint
是一个模块,它允许相对于某些python数据结构(例如列表列表)以“更漂亮”的方式打印到屏幕上。有时会派上用场。查看与print
相比的差异。 这里的关键是识别模式,并在代码中清楚地实现。有许多可能适合的模式-但在这里,我使用了“只看偶数列”和“只看矩阵的右下三角形”。
例如,将n
更改为11,将产生:
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1],
[0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1],
[0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1],
[0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1],
[0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1],
[0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
[0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]]