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

Python列表乘法:[[...]]*3使3个列表在修改时相互镜像

为什么会这样?我真的不明白:

>>> P = [ [()]*3 ]*3
>>> P
[[(), (), ()], [(), (), ()], [(), (), ()]]
>>> P[0][0]=1
>>> P
[[1, (), ()], [1, (), ()], [1, (), ()]]
Run Code Online (Sandbox Code Playgroud)

python list multiplication

35
推荐指数
4
解决办法
2万
查看次数

嵌套列表索引

我在Python中使用嵌套列表时遇到了一些问题.

基本上,我有一个包含所有0值的2D列表,我想在循环中更新列表值.

但是,Python不会产生我想要的结果.有什么我误解range()和Python列表索引?

some_list = 4 * [(4 * [0])]
for i in range(3):
    for j in range(3):
        some_list[i+1][j+1] = 1
for i in range(4):
    print(some_list[i])
Run Code Online (Sandbox Code Playgroud)

我期望的结果是:

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

但是Python的实际结果是:

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

这里发生了什么?

python python-3.x

11
推荐指数
2
解决办法
4112
查看次数

Python - 使用乘法运算符创建列表中的对象副本

在Python中,如果我将对象列表乘以整数,我会得到一个对该对象的引用列表,例如:

>>> a = [[]] * 3
>>> a
[[], [], []]
>>> a[0].append(1)
>>> a
[[1], [1], [1]]
Run Code Online (Sandbox Code Playgroud)

如果我想要的行为是创建原始对象的副本列表(例如,通过"copy.copy()"方法或某种标准创建的副本,是否有一种优雅的方法可以使用相同的乘法运算符执行此操作?或者我应该坚持列表理解还是什么?例如

[[] for x in range(0,3)]
Run Code Online (Sandbox Code Playgroud)

任何版本的Python都可以.

python list

8
推荐指数
2
解决办法
7272
查看次数

如何在python中追加子列表的元素

我有一个表格列表:

list = [[3, 1], [3, 2], [3, 3]]
Run Code Online (Sandbox Code Playgroud)

我想将它分成两个列表,一个列表中每个子列表的x值,另一个列表中每个子列表的y值.

我目前有这个:

x = y = []
for sublist in list:
    x.append(sublist[0])
    y.append(sublist[1])
Run Code Online (Sandbox Code Playgroud)

但是这会返回这个,我不知道为什么:

x = [3, 1, 3, 2, 3, 3]
y = [3, 1, 3, 2, 3, 3]
Run Code Online (Sandbox Code Playgroud)

python list

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

为什么'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中以持久的方式链接?

设置变量.另一个变量设置为第一个.第一个改变了价值.第二个没有.从一开始就是编程的本质.

>>> a = 1
>>> b = a
>>> b = b - 1
>>> b
0
>>> a
1
Run Code Online (Sandbox Code Playgroud)

然后我将它扩展到Python列表.声明并附加列表.宣布另一个列表与第一个列表相同.第二个列表中的值发生变化.神秘的是,第一个列表中的值虽然没有直接作用,但也会发生变化.

>>> alist = list()
>>> blist = list()
>>> alist.append(1)
>>> alist.append(2)
>>> alist
[1, 2]
>>> blist
[]
>>> blist = alist
>>> alist.remove(1)
>>> alist
[2]
>>> blist
[2]
>>> 
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

我如何防止这种情况发生 - 我希望alistblist(不可变的,如果你愿意的话)的变化不感兴趣?

python list immutability

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

区间(3)中i的[[]]*3和[[]之间的差异]

我已经使用Python多年了,但只是注意到一个非常令人困惑的事情.

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

a=[[] for i in range(3)]
a[0].append(3)
Run Code Online (Sandbox Code Playgroud)

即使类型(列表)相同,也不会产生相同的效果.第一个产量a=[[3], [3], [3]],第二个产量a=[[3],[],[]](如预期的那样).

有人有解释吗?

python list

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