Python在列表中循环并赋值
我有一个列表,想更改它的元素Python在列表中循环并赋值,python,list,loops,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的风格。如果已经有人问过这类问题,请随意重定向我并结束此主题。谢谢大家! 在循环中赋值将在fo
list = ['apple','potato']
现在,当这起作用的时候
for i in range(list):
list[i] = list[i].capitalize()
这个没有,我就是不明白为什么
for i in list:
i = i.capitalize()
我是Python的新手,我的背景是C++,所以我仍然在尝试适应Python的风格。如果已经有人问过这类问题,请随意重定向我并结束此主题。谢谢大家!
在循环中赋值将在for
的内创建一个新名称i
,该名称在每次迭代后都会丢失其值
但这并不是重点。如果您处理的是可以在适当位置更改的可变子结构,则可能会引起注意,即:
l = [[1], [2]]
for i in l:
i.append(2)
更改将得到相应的反映(子列表将被附加到它们后面的get2
)
但是,在您的例子中,有str
s是不可变的对象i.capitalize()
,对str
实例执行操作将创建赋值后丢失的值的新副本。它不会影响列表中的对象
容器中i的中的值i
确实引用了序列中包含的对象。当您将i
分配给i.capitalize()
的结果时,名称i
现在将引用返回的新的大写实例
不要试图把C++
和Python
相提并论,我知道这有时会让学习变得更容易,但有时,in会把你弄糊涂
强制性说明:不要使用列表
作为名称,它会屏蔽内置名称列表
,因为这样做不会更新列表。只有变量i被更改。当您遍历for
循环时,变量i
获取列表中每个元素的值。它不是对列表中每个点的引用。这是一个单独的变量。如果重新分配它,则只会影响变量i
。因此它是一个正确的值吗?是否执行lst=[x.capitalize(),用于lst中的x]
(避免list
,因为它是列表类型)可能的重复可能会有帮助: