在第二个示例中,当在item
中使用方括号时,可以更改列表。
list1 = [[1, 2]]
for item in list1:
item = [88, 88]
print(list1)
-----------------
list2 = [[[1, 2]]]
for item in list2:
item[0] = [88, 88]
print(list2)
输出:
[[1, 2]]
[[[88, 88]]]
我进行了一次搜索,发现item
只是元素的临时名称。不是物品本身。
那么,为什么在将[]
添加到“项目”时可以更改列表本身呢?
答案 0 :(得分:3)
首先,我认为您应该阅读Iteration in python。
只需清理一下即可:
list1 = [[1, 2]]
表示您有list1
包含一个列表,该列表包含[1,2]
处的列表list1[0]
。list2 = [[[1, 2]]]
表示您有list2
包含列表[[1, 2]]
。第二,为了将列表中第一项的值从[1,2]
更改为[88,88]
,您可以编写:
list1 = [[1, 2]]
for item in list1:
item[0] = 88
item[1] = 88
print(list1)
输出:
[[88, 88]]
现在,让我们解释一下:
对于for循环的每次迭代,变量item
仅分配有列表中一项的值的副本,因此对item
所做的更改将不会反映在列表中
这就是为什么您第一次尝试使用list1
遍历列表时的原因-item = [88, 88]
仅更改了副本,而不更改了实际列表(此处的副本是列表{{ 1}})。
第二次尝试,即:
[1,2]
对于for循环的每次迭代,您都在访问for item in list2:
item[0] = [88, 88]
,它是对item[0]
中第一个元素的 reference 的副本。因此,当您为其分配值时,该值将在列表中更改。
答案 1 :(得分:0)
据我所知,在第一个示例中,当您的程序通过for循环时,它获取item的值(为[1、2]),在for循环内,您将变量item更改为[88,88 ],实际上不是更新列表本身,而是更新包含[1、2]的变量。
在第二个示例中,for循环返回变量item作为list2内的第二个列表。使用方括号时,它在该列表中的索引为0,这意味着它将在列表中查找第0个元素,然后将其更新为[88,88]。
希望这会有所帮助。