首页 > 解决方案 > Python:列表列表的基本操作

问题描述

我承认我对列表的行为方式感到困惑,并且我编写了许多示例程序并倾注了文档问题并且无法弄清楚。

我正在考虑将多达 40 种选择中的四种选择组合成独特的组合(从数学的角度来看)。在运行时,我读入了一个选项列表(每次运行都会更改),并且需要构建一个 X 乘 X 的表(使用列表列表),其中 X = 选项数。我需要实时构建我的列表列表,以初始值 0 加载每个列表中的每个位置,然后继续。

我首先构建一个长度合适的空白列表并用 0 加载它。然后我根据需要多次将该空白列表附加到我的分数列表中。所以现在理论上我有一个列表,其中包含 28 个列表的出现,该列表在 28 个位置中的每个位置都有一个 0。

如果我尝试在大列表(例如位置 [2] [2])中的一个位置(排序为一列,一行)更改一个值,为什么位置 2 在列表的每个成员中都会发生变化,那么会发生什么。关于列表的行为方式,我缺少一些非常基本的东西。

谢谢你的帮助。


blank = []
counter = 0
while counter < 28:
    blank.insert(counter,0)
    counter +=1

print("Blank = ", blank)
scores = []
counter = 0
while counter < 28:
    scores.append(blank)
    counter +=1

print("Array built", scores)

scores[2][2] = 2

print("array changed", scores)one position in one row

标签: pythonlistmultidimensional-array

解决方案


@Haytam 和@AnantKumar 的答案对于为什么所有列表都被更改是正确的;所有列表都具有相同的引用,这可以通过id(blank)在每次迭代中运行来看出。

像这样的东西怎么样:

import numpy as np

scores = np.repeat(0, 28**2).reshape(28, 28)

这将创建一个ndarray由 28 个数组组成的数组,所有数组都用 28 个零填充,其中一个特定的值可以更改,就像您尝试做的那样。

确认:

可以通过以下方式验证更改:

scores[2][2] = 2
sum(sum(scores))
>>> 2

推荐阅读