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

使用乘法(*)意外行为生成子列表

我确信这已在某个地方得到解答,但我不确定如何描述它.

假设我想创建一个包含3个空列表的列表,如下所示:

lst = [[], [], []]
Run Code Online (Sandbox Code Playgroud)

这样做我以为我很聪明:

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

但是我发现,在调试了一些奇怪的行为之后,这导致了对一个子列表的追加更新,比如lst[0].append(3),更新整个列表,[[3], [3], [3]]而不是[[3], [], []].

但是,如果我用列表初始化列表

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

然后做lst[1].append(5)了预期的[[], [5], []]

我的问题是为什么会发生这种情况?有趣的是,如果我这样做

lst = [[]]*3
lst[0] = [5]
lst[0].append(3)
Run Code Online (Sandbox Code Playgroud)

那么单元格0的"连接"就被打破了[[5,3],[],[]],但是我得到了,但lst[1].append(0)仍然会导致[[5,3],[0],[0].

我最好的猜测是在表单中使用乘法[[]]*x会导致Python存储对单个单元格的引用......?

python list mutable nested-lists

11
推荐指数
3
解决办法
1357
查看次数

为什么dict中的值在python中改变了总数?

最近我做了2个实验:

(1):

>>> a = dict(zip([1,2,3],[4]*3))
>>> a
{1: 4, 2: 4, 3: 4}

>>> a[1] = 111    
>>> a
{1: 111, 2: 4, 3: 4}
Run Code Online (Sandbox Code Playgroud)

(2):

>>> a = dict(zip([1,2,3],[{'a':True,'b':True}]*3))
>>> a
{1: {'a': True, 'b': True}, 
 2: {'a': True, 'b': True}, 
 3: {'a': True, 'b': True}}

>>> a[1]['a']=False  # Here I changed the value of a[1]['a'] from True to False    
>>> a
{1: {'a': False, 'b': True}, 
 2: {'a': False, 'b': True}, 
 3: {'a': False, 'b': True}}     #all …
Run Code Online (Sandbox Code Playgroud)

python dictionary

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

为什么'append'会改变列表中的所有元素?

我正在建立一份清单清单.我正在读取输入文件中的元素.我正在读取文件中的每一行作为字符串单元素到列表中的子列表.首先,我创建了列表列表:

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

但是,当我尝试追加项目时,我得到以下内容:

>>> b[1].append("abc")
>>> b
[ ['abc'], ['abc'], ['abc'], ['abc'], ['abc'])
Run Code Online (Sandbox Code Playgroud)

为什么要append更改所有子列表?就是insert()在这种情况下更好?

python list

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

Python二维查询..

我在python中看到一个非常不寻常的行为..请让我知道我做错了什么!

bc = [[0]*(n+1)]*(n+1)

for i in range(n+1):
    bc[i][i] = 1

print (bc)        
Run Code Online (Sandbox Code Playgroud)

产量

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

我试图将二维数组的对角元素初始化为1,但它正在用1初始化所有元素.我认为我在访问二维数组时遇到了问题.

另外,请告诉我如何使用两个循环来访问二维数组的所有元素..我的下一步...

谢谢.

python multidimensional-array

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

多目标分配

我正在读一本关于Python的书,关于多目标任务的书中有一个特殊的部分.现在这本书解释如下:

在此输入图像描述

但我没有看到这个的使用.这对我来说毫无意义.为什么要使用更多变量?有理由这样做吗?是什么让这与使用如此不同:a='spam'然后打印a3次?

我只能想到用它来清空一行中的变量.

python variable-declaration

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

在python中使用*运算符创建列表

为什么要[0] * 5创建一个列表[0, 0, 0, 0, 0],而不是[[0], [0], [0], [0], [0]]

*操作员是否重复[0]5次导致[[0], [0], [0], [0], [0]]

python list

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