您如何专门将元素添加到2维数组?

时间:2020-01-09 21:10:55

标签: python

对于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)

这是我到目前为止所拥有的。

1 个答案:

答案 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)

一些小注释(实际上,最好在代码审查论坛中这样做):

  1. 如果矩阵始终是正方形,则只需定义一个值(此处为n),而无需定义两个rowscols。假设n也是奇数,则您的模式定义正确。
  2. arr并不是一个很好的名字,看到“数组”这个名字通常是指一维数组。在我看来,“矩阵”更适合[[mat简而言之]。
  3. 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]]