所以我有一個4×3嵌套列表(4行,3列),我已嵌套如下:更新元素將不會在Python列表工作
>>> c= [x[:] for x in [[None]*3]*4]
>>> print c
[[None, None, None],
[None, None, None],
[None, None, None],
[None, None, None]]
我已經以這種方式初始化了我的嵌套列表,因爲this other SO question很好地解釋了爲什麼其他一些方法不起作用。 (如c = [[無] * 3] * 4)
現在我想的第一行中的所有元素更新爲0,即我想設置的所有元素在
c[0] to 0. So I tried the following:
>>> for x in c[0]: x = 0
...
>>> c
[[None, None, None], [None, None, None], [None, None, None], [None, None, None]]
>>>
,你可以看,元素沒有更新。然而 以下工作:
>>> c[0] = [0 for x in c[0]]
>>>
>>> c
[[0, 0, 0], [None, None, None], [None, None, None], [None, None, None]]
而且我幾乎可以肯定,它會因爲我創建0的一個新的列表,並將其分配給C [0]。
無論如何,我接着繼續使用for循環,並嘗試將第一列(即每行的第一個元素)更新爲0並且工作正常。
>>> for x in c: x[0] = 0
...
>>> c
[[0, None, None], [0, None, None], [0, None, None], [0, None, None]]
我明白,這對循環更新是從前面的for循環更新不同的,因爲第一個試圖遍歷一個元素,而這一次遍歷列表,只是訪問每個列表的第一個元素。
我敢肯定,我錯過了一些關於名稱指向其他名字的東西,但我不能把手指放在這裏的確切問題。有人可以幫忙嗎?
整數是不可變的,所以:'a = b = 1; b + = 1'不會影響'a'。 –
我明白,整數和字符串在Python中是不可變的,但我恐怕不明白這個問題的含義。你能否詳細說明一下? – keithxm23
爲什麼不使用索引,通常在迭代時不能更改列表,而是在枚舉(c [0]):c [0] [n] = 0中使用'for n,_ –