相关疑难解决方法(0)

列表更改意外地反映在子列表中

我需要在Python中创建一个列表列表,所以我输入以下内容:

myList = [[1] * 4] * 3
Run Code Online (Sandbox Code Playgroud)

列表看起来像这样:

[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]  
Run Code Online (Sandbox Code Playgroud)

然后我改变了最里面的一个值:

myList[0][0] = 5
Run Code Online (Sandbox Code Playgroud)

现在我的列表看起来像这样:

[[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]  
Run Code Online (Sandbox Code Playgroud)

这不是我想要或期望的.有人可以解释一下发生了什么,以及如何解决这个问题?

python list mutable nested-lists

576
推荐指数
10
解决办法
3万
查看次数

无法列出指定大小的列表

我正在尝试列出大约5000个列表的列表,它一直搞乱.
现在我就是这样做的:

array = [[]]*5000
for line in f2:
    a = line.split()
    grid = int(a[0])
    array[grid].append(a[1])

print Counter(array[0]).most_common(10)
Run Code Online (Sandbox Code Playgroud)

问题是,当我创建计数器时,它就像整个列表实际上只是一个列表一样.有什么明显的东西我做错了吗?谢谢

python counter

1
推荐指数
1
解决办法
423
查看次数

为什么创建列表列表会产生意外行为?

编辑:这个问题是关于为什么这种行为是这样的,而不是如何绕过它,这就是所谓的重复的内容。


我使用以下符号在不同情况下创建特定大小的列表。例如:

>>> [None] * 5
[None, None, None, None, None]
>>>
Run Code Online (Sandbox Code Playgroud)

这似乎按预期工作并且短于:

>>> [None for _ in range(5)]
[None, None, None, None, None]
>>>
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用相同的方法创建列表列表:

>>> [[]] * 5
[[], [], [], [], []]
>>>
Run Code Online (Sandbox Code Playgroud)

很公平。它似乎按预期工作。

然而,在检查调试器时,我注意到所有子列表存储桶都具有相同的值,即使我只添加了一个项目。例如:

>>> t = [[]] * 5
>>> t
[[], [], [], [], []]
>>> t[1].append(4)
>>> t
[[4], [4], [4], [4], [4]]
>>> t[0] is t[1]
True
>>>
Run Code Online (Sandbox Code Playgroud)

我并不期望所有顶级数组元素都是对单个子列表的引用;我期望有 5 个 …

python list python-3.x

1
推荐指数
1
解决办法
358
查看次数

标签 统计

python ×3

list ×2

counter ×1

mutable ×1

nested-lists ×1

python-3.x ×1