为什么我只能在for循环中改变一个列表,当我使用括号时?

问题描述 投票:-3回答:1

当我使用括号 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 dictionary search
1个回答
3
投票

首先,我认为你应该阅读一下关于 迭代在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. 因此,当你给它赋值时,列表中的值就会改变。


0
投票

根据我的理解,在第一个例子中,当你的程序经过for循环时,它得到了item的值(是[1,2]),在for循环里面,你把变量item改为[88,88],实际上并没有更新列表本身,而是更新了包含[1,2]的变量。

在第二个例子中,for循环返回的变量项是list2里面的第二个list。当你使用方括号时,它得到该列表中0的索引,这意味着它寻找列表中的第0个元素,然后将其更新为你的[88,88]值。

希望这能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.