尝试将输入转换为二维数组

问题描述 投票:0回答:1

基本上,我想将输入转换为二维数组。输入是 5 x 5。我做了我认为合乎逻辑的操作,但它仍然打印出不正确的数组。不知何故,每当我将 arr[0][0] 更改为某些内容时,arr[1][0]、arr[2][0]、arr[3][0],.... 都会随之改变。我不确定我在这里做错了什么。

这是我尝试过的代码(抱歉,如果变量令人困惑):

side = 5
L = []
a = []
arr=[[0]*side]*side
for o in range(5):
    i = input()
    a.append(i)
d = 0
for i in a:
    c = 0
    for b in i:
        L.append(b)
        arr[d][c] = L.pop(0)
        c += 1
    d += 1
print(arr)
python multidimensional-array input output
1个回答
0
投票

您初始化数组的方式错误。您执行此操作的方式会创建一个引用同一列表的列表,因此会发生级联更改。 就好像每行都有同一个列表的五个副本。结果是修改一行会影响同一列中的所有其他行元素。这就是为什么更改 arr[0][0] 会影响 arr[1][0] 等。

解决方案是为每一行分配一个自己的列表。看起来像这样:

arr = [[0] * side for _ in range(side)]

“for _ in range(side)”为每一行创建数组内的内部列表。“_”是Python中的常用变量名,当稍后不使用该变量的值时使用。在这个例子中,它就像“做范围(边)次”

希望这有帮助! :)

© www.soinside.com 2019 - 2024. All rights reserved.