如何填充二维数组?

时间:2017-06-08 18:34:27

标签: python list python-3.x

我有以下代码(几乎)用Python填充列表列表(我将其称为二维数组)。

而不是从0-6上升并重复3次,我希望它用数字0到20填充数组。请参阅下面的代码:

#matrix=[1,2,3,4,5,6,7],[8,9,10,11,12,13,14],[15,16,17,18,19,20,21]
#print(matrix[1][2])

rows=3 
columns=7 

for i in range(rows):
  for j in range(columns):
    matrix=[j]
    i=i+1    
    print(matrix,end="")

错误的输出是:

[0][1][2][3][4][5][6][0][1][2][3][4][5][6][0][1][2][3][4][5][6]   

我希望输出为:

[1,2,3,4,5,6,7],[8,9,10,11,12,13,14],[15,16,17,18,19,20,21]

2 个答案:

答案 0 :(得分:1)

有更好的方法,但这是最直接的方式:

>>> rows = 3
>>> columns = 7
>>> n = 1
>>> matrix = []
>>> for _ in range(rows):
...     sub = []
...     for _ in range(columns):
...         sub.append(n)
...         n += 1
...     matrix.append(sub)
...
>>> matrix
[[1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14], [15, 16, 17, 18, 19, 20, 21]]

好的方法,一种奇特的方式:

>>> import itertools
>>> counter = itertools.count(1)
>>> rows = 3
>>> columns = 7
>>> matrix = [[n for n, _ in zip(counter, range(columns))] for _ in range(rows)]
>>> matrix
[[1, 2, 3, 4, 5, 6, 7], [9, 10, 11, 12, 13, 14, 15], [17, 18, 19, 20, 21, 22, 23]]
>>>

答案 1 :(得分:0)

使用列表理解。你想要3行,所以列表理解的基础是:[for y in range(rows)]。您希望增加一个数字,从一个可被列整除的数字开始,但从1开始:range(columns*y+1,...)并且您希望列范围(7)为range(columns*y+1,columns+(columns*y+1)),然后将其转换为列表。

rows=3 
columns=7 

matrix=[list(range(columns*y+1,columns+(columns*y+1))) for y in range(rows)]

print(matrix)
#outputs: [[1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14], [15, 16, 17, 18, 19, 20, 21]]