python使用while循环填充数组

时间:2020-02-16 07:44:02

标签: python arrays loops while-loop

我要做的就是按顺序用数字填充数组。因此,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)

4 个答案:

答案 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 = 3numColumns = 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)