当我使用括号 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
只是元素的临时名称,而不是项目本身。不是项目本身。所以为什么在添加 []
到 "item "的时候,列表本身可以被改变吗?
首先,我认为你应该阅读一下关于 迭代在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,2]
).
在你的第二次尝试中,即
for item in list2:
item[0] = [88, 88]
在for循环的每一次迭代中,你都会访问到 item[0]
的副本。参考 到第一个元素 item
. 因此,当你给它赋值时,列表中的值就会改变。
根据我的理解,在第一个例子中,当你的程序经过for循环时,它得到了item的值(是[1,2]),在for循环里面,你把变量item改为[88,88],实际上并没有更新列表本身,而是更新了包含[1,2]的变量。
在第二个例子中,for循环返回的变量项是list2里面的第二个list。当你使用方括号时,它得到该列表中0的索引,这意味着它寻找列表中的第0个元素,然后将其更新为你的[88,88]值。
希望这能帮到你。