相关疑难解决方法(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万
查看次数

星号运算符(*)应用于列表和整数

假设我们有一个Foo类,我们想要实例化一个列表foos,我们可以这样做:

foo_list = [Foo()] * 3
Run Code Online (Sandbox Code Playgroud)

现在怎么办foo_list[0].x = 5?该声明将属性设置x所有列表里面的实例!

当我发现它时,它引起了我的注意.问题是当我们创建这样的列表时,显然python将Foo首先创建实例,然后是列表实例,然后将相同的对象追加到它3次,但我真的希望它能做到这样的事情:

foo_list = [Foo() for i in range(3)]
Run Code Online (Sandbox Code Playgroud)

你也不是吗?嗯,现在我知道这个语法糖绝对不能用,因为我想用它,但那么,它用于什么?我唯一能想到的是创建一个像这样的初始大小的列表:list = [None] * 5对于我来说,在python的情况下这对我来说没有多大意义.

这个语法有没有其他真正有用的用例?

python python-2.7

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

标签 统计

python ×2

list ×1

mutable ×1

nested-lists ×1

python-2.7 ×1