Python 为什么for-each循环(据我所知)无法对数组执行操作?
我环顾四周,寻找有关这种循环的信息,如图所示:Python 为什么for-each循环(据我所知)无法对数组执行操作?,python,python-3.x,for-loop,Python,Python 3.x,For Loop,我环顾四周,寻找有关这种循环的信息,如图所示: listOfStrings = ["hey", "I", "am","still", "here"] listOfStringsCopy = ["hey", "I", "am", "still", "here"] for i in range(len(listOfStrings)): listOfStrings[i] = "something else" for word in listOfStringsCopy: word =
listOfStrings = ["hey", "I", "am","still", "here"]
listOfStringsCopy = ["hey", "I", "am", "still", "here"]
for i in range(len(listOfStrings)):
listOfStrings[i] = "something else"
for word in listOfStringsCopy:
word = "something else"
print(listOfStrings, listOfStringsCopy)
返回:
['something else', 'something else', 'something else', 'something else', 'something else']
['hey', 'I', 'am', 'still', 'here']
我现在才开始明白为什么当你试图对正在循环的列表做任何事情时,这个特殊的(for word in)循环似乎是完全无效的。我想我记得我在某个地方读到过,每个循环都会复制一份列表或其他东西,但却找不到任何具体的东西
首先,我是否正确地引用了这种循环?我在python上运行的第二个for循环是“for-each循环”吗?尽管上面的第一个循环具有非常相似的语法
第二,有人能解释一下为什么会这样吗?当我尝试使用除键/字典进程之外的列表时,是否应该坚持常规的第一个循环
我已经阅读了可能重复的问题,它回答了我的问题,每当我需要修改列表中的项目时,我都需要循环索引,然而,我仍然想知道,在通过索引循环的循环和通过列表元素循环的循环之间是否存在任何语言描述,就像在我的第二个循环中一样。第二个循环:
for word in listOfStringsCopy:
word = "something else"
不是修改现有列表,因为您实际上是在重新绑定变量,即word
,而不是修改列表,这显然是我们希望它工作的方式
这相当于:
x = [1,2,3,4,5]
y = x[0]
y = "something else"
现在,y不是指列表x的第一个元素,而是指字符串“其他东西”。
word=“其他东西”
不会创建与现有变量同名的新变量。它重新绑定现有变量。重新绑定该变量对列表没有任何作用。谢谢,这有助于我理解wise alot@user2357112感谢您指出这一点,修复了这个短语。从python语法的角度来看,范围内的i的和列表中的x的之间没有区别。这两种方法都是通过一个iterable、一个list或range进行的。还要注意在一些重复答案中使用了enumerate
。如果要替换列表中的每个元素,使用列表理解可能会更快、更简单。