Python循环遍历列表并分配值

时间:2016-12-21 13:15:31

标签: python list loops

我有一个列表,想要更改其元素

list = ['apple','potato']

现在,虽然这有效

for i in range(list):
    list[i] = list[i].capitalize()

这个没有,我只是不明白为什么

for i in list:
    i = i.capitalize()

我是Python的新手,我唯一的背景是C ++,所以我仍然在努力适应Python的风格。如果已经询问过这类问题,请随时重定向并关闭此主题。谢谢!

1 个答案:

答案 0 :(得分:1)

在循环中分配将在i内创建一个新名称for,在每次迭代后丢失其值。

但这并非如此。如果您正在处理可以就地更改的可变子结构, 可以注意到效果,即:

l = [[1], [2]]    
for i in l:
    i.append(2)

更改将相应地反映出来(子列表将附加到2)。

但是,在你的情况下,你有str个不可变对象。对i.capitalize()实例执行操作的str将创建已分配然后丢失的值的新副本。它不会影响列表中的对象。

i 中的值for i in container:确实将引用到序列中包含的对象。将i分配给i.capitalize()的结果时,名称i现在将引用返回的新大写实例。

请勿尝试在C++Python之间绘制相似之处,我知道它有时会使学习变得更容易,但有时候会让你感到困惑。

强制性说明:请勿使用list作为名称,它会屏蔽内置名称list