gpt4 book ai didi

python - 在 python 中,当我们进行循环时,循环变量与列表中的元素之间的关系是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 12:40:50 25 4
gpt4 key购买 nike

这里有几个列表:a, b, etc我想分别对它们进行一些更改,但我对 for 循环的行为感到困惑。

例如:如果我们这样做

a, b = range(5), range(5,10)
for x in [a, b]: x += [0]
print(a,b)

我们得到

([0, 1, 2, 3, 4, 0], [5, 6, 7, 8, 9, 0])

a,b 被修改。

但如果我们这样做

a, b = range(5), range(5,10)
for x in [a, b]: x = x + [0]
print(a,b)

我们得到

([0, 1, 2, 3, 4], [5, 6, 7, 8, 9])

a,b 没有被修改。我很困惑,x和a之间有什么关系?何时或如何用 x 修改 a 的值?顺便问一下,a+=b 和 a=a+b 有什么区别?

无论如何,我找到了一个我们可以这样做的解决方案

a, b = range(5), range(5,10)
lis = [a, b]
for i, x in enumerate(lis):
lis[i] = ...

然后我们可以修改a & b的值。但是这种方法需要额外制作一个列表。

还有另一种解决方案

for x in ['a', 'b']:
exec(x + '=' + x + '+ ...')

还有一个更简单的解决方案

a, b = range(5), range(5,10)
for x in [a, b]: x[:] = x + [0]
print(a,b)

我们会发现a,b被修改了:)

最佳答案

该关系与 Python 中的所有变量绑定(bind)相同。名称绑定(bind)到值。您看到的差异是因为您在做不同的事情,有时是根据值操作,有时是根据名称操作。

对于列表,+= 就地扩展了列表——也就是说,它修改了原始列表。因此,在使用该列表的任何地方都可以看到修改。

当你执行 x = x + [0] 时,你将名称 x 重新绑定(bind)到一个新列表(通过添加旧列表加上 [0 ])。这不会修改原始列表,因此使用该列表的其他地方不会看到更改。

如果您四处搜索有关“变量”、“名称”、“值”、“通过引用调用”等的 Python 问题,您会发现其他相关讨论。 Here是在函数参数绑定(bind)的上下文中讨论类似问题的问题。 for循环变量绑定(bind)的原理相同。

关于python - 在 python 中,当我们进行循环时,循环变量与列表中的元素之间的关系是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15354328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com