相关疑难解决方法(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中创建一些空的嵌套列表

我想要一个变量,它是一个嵌套的列表,列出了一些我可以在以后填写的空列表.看起来像:

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

但是,我事先并不知道我需要多少列表,只是在创建步骤,因此我需要一个变量a来确定它.我想简单my_variable=[[]]*a,但是创建了列表的副本,这不是我想要的.

我可以:

my_variable=[]  
for x in range(a):
   my_variable.append([])
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一种更优雅的解决方案(最好是单线).有没有?

python list nested-lists

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

循环遍历列表列表

我是编程新手,我有一个无法解决的基本问题。我尽可能地简化了它。在此简化版本中,我正在迭代一个空列表。我只想将索引存储在“对称矩阵”中:

n = 2
B = [[None] * n] * n
print B, "\n"
for i in range(n):
    for j in range(n):
        B[i][j] = [i, j]
        print B
Run Code Online (Sandbox Code Playgroud)

最初,该列表如下所示:

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

循环槽后,我希望打印输出为:

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

相反,我得到这个:

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

python list

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

python如何更改嵌套列表中的元素

我一直在使用python,今天我对一个简单的嵌套列表感到惊讶.

如何更改列表元素的值?

>>> l=[[0,0]]*10
>>> l
[[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]]
>>> l[0]
[0, 0]
>>> l[0][0]
0
>>> l[0][0]=1 #here comes the question
>>> l
[[1, 0], [1, 0], [1, 0], [1, 0], [1, 0], [1, 0], [1, 0], [1, 0], [1, 0], [1, 0]]
>>> 
Run Code Online (Sandbox Code Playgroud)

我期望作为最终结果

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

为什么不追加?(我想要一个理论上的解释)我怎样才能得到理想的结果?

谢谢.

编辑:在以另一种方式启动列表时,我得到了所需的结果

>> l=[[0,0],[0,0]]
>>> l
[[0, 0], [0, 0]]
>>> l[0][0]=1
>>> l
[[1, …
Run Code Online (Sandbox Code Playgroud)

python nested-lists

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

Python - 在这种情况下如何解释将数据分配给数组

请参阅下面的代码,为什么这样做

array[0][0] = 'Tadaaaa'
Run Code Online (Sandbox Code Playgroud)

改变了5个元素而不是1个?

首先,创建一个空数组:

x, y = 5, 3

# when you multiply it's copying, so the ids of each item is the same
array = [[set()] * y] * x
array
Run Code Online (Sandbox Code Playgroud)

我会得到:

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

然后为元素赋值:

array[3][2].add('BBC')
array
Run Code Online (Sandbox Code Playgroud)

我会得到:

[[{'BBC'}, {'BBC'}, {'BBC'}],
 [{'BBC'}, {'BBC'}, {'BBC'}],
 [{'BBC'}, {'BBC'}, {'BBC'}],
 [{'BBC'}, {'BBC'}, {'BBC'}],
 [{'BBC'}, {'BBC'}, {'BBC'}]]
Run Code Online (Sandbox Code Playgroud)

但当我这样做时:

array[0][0] = 'Tadaaaa'
array
Run Code Online (Sandbox Code Playgroud)

我明白了:

[['Tadaaaa', {'BBC'}, {'BBC'}],
 ['Tadaaaa', {'BBC'}, …
Run Code Online (Sandbox Code Playgroud)

python arrays

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

标签 统计

python ×5

list ×3

nested-lists ×3

arrays ×1

mutable ×1