我需要在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)
这不是我想要或期望的.有人可以解释一下发生了什么,以及如何解决这个问题?
我想要一个变量,它是一个嵌套的列表,列出了一些我可以在以后填写的空列表.看起来像:
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)
但我正在寻找一种更优雅的解决方案(最好是单线).有没有?
我是编程新手,我有一个无法解决的基本问题。我尽可能地简化了它。在此简化版本中,我正在迭代一个空列表。我只想将索引存储在“对称矩阵”中:
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,今天我对一个简单的嵌套列表感到惊讶.
如何更改列表元素的值?
>>> 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) 请参阅下面的代码,为什么这样做
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)