为什么在使用方括号时只能在for循环中更改列表?

时间:2020-04-22 17:53:04

标签: python list iteration

在第二个示例中,当在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只是元素的临时名称。不是物品本身。 那么,为什么在将[]添加到“项目”时可以更改列表本身呢?

2 个答案:

答案 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]。

希望这会有所帮助。