Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python在列表中循环并赋值_Python_List_Loops - Fatal编程技术网

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)
更改将得到相应的反映(子列表将被附加到它们后面的get
2

但是,在您的例子中,有
str
s是不可变的对象
i.capitalize()
,对
str
实例执行操作将创建赋值后丢失的值的新副本。它不会影响列表中的对象

容器中i的
中的值
i
确实引用了序列中包含的对象。当您将
i
分配给
i.capitalize()
的结果时,名称
i
现在将引用返回的新的大写实例

不要试图把
C++
Python
相提并论,我知道这有时会让学习变得更容易,但有时,in会把你弄糊涂


强制性说明:不要使用
列表
作为名称,它会屏蔽内置名称
列表

,因为这样做不会更新列表。只有变量i被更改。当您遍历
for
循环时,变量
i
获取列表中每个元素的值。它不是对列表中每个点的引用。这是一个单独的变量。如果重新分配它,则只会影响变量
i
。因此它是一个正确的值吗?是否执行
lst=[x.capitalize(),用于lst中的x]
(避免
list
,因为它是列表类型)可能的重复可能会有帮助: