我要做的就是按顺序用数字填充数组。因此,array [0] [0] = 0,array [0] [1] = 1,依此类推。为什么这不起作用?我不知道。
def populateArray(ar):
count = 0
i=0
j=0
while (i<len(ar)):
while (j<len(ar[i])):
ar[i][j] = count
count = count + 1
j=j+1
j=0
i=i+1
return ar
numColumns = input('how many columns?')
numRows = input('how many rows?')
arr = [[0]*int(numColumns)]*int(numRows)
arr=populateArray(arr)
print(arr)
答案 0 :(得分:1)
在初始化arr
变量时,您将列表列表与数字相乘,这将导致“混乱”,因为您实际要做的是仅对第一个列表的引用进行相乘(来自您的列表列表),因此实际上您的arr
中只有一个列表和对该列表的一堆引用,您可以执行以下操作来解决此问题:
arr = [[0] * int(numColumns) for _ in range(int(numRows))]
或:
arr = [[0 for _ in range(int(numColumns))] for _ in range(int(numRows))]
在代码中对此进行更改后,对于numRows = 3
和numColumns = 4
,您将获得:
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]
答案 1 :(得分:0)
您可以这样做:
numColumns = input('how many columns?')
numRows = input('how many rows?')
arr = [[i+j for i in range(int(numRows))] for j in range(int(numColumns))]
arr=populateArray(arr)
print(arr)
您的代码存在问题,就是您多次将同一数组追加到主数组中,例如[l, l, l]
,而l
是一个列表。
因此,只要您更改l
的元素,它将更改列表中的所有l
。
因此,您的代码可以正常工作,但是每次更改另一个列表时,所有先前的列表都会生效。
答案 2 :(得分:0)
使用此语法创建多维数组时
arr = [[0]*int(numColumns)]*int(numRows)
多次创建同一元素的引用,因此,如果为其中之一分配值,则基本上是在更改所有元素,因为它们都引用同一数据。 例如:
arr = [[0]*int(numColumns)]*int(numRows)
arr[0][1]=2
print(arr)
输出
[[0, 2], [0, 2], [0, 2], [0, 2]]
我只更改了一个元素,这就是结果。 您应该使用:
arr = [[0 for i in range(int(numColumns))] for j in range(int(numRows))]
arr[0][1]=2
print(arr)
输出:
[[0, 2], [0, 0], [0, 0], [0, 0]]
答案 3 :(得分:0)
您还可以使用numpy创建结构,然后使用numpy.tolist()将其转换为python列表
import numpy as np
numColumns = int(input('how many columns?'))
numRows = int(input('how many rows?') )
arr = np.arange(numRows*numColumns).reshape(numRows, numColumns).tolist()
print(arr)