python - 为什么每个循环(据我了解)无法对数组执行操作?
问题描述
我四处寻找有关此处看到的这种循环的信息:
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 loop”吗?
其次,有人可以解释为什么会这样,当我尝试对除了键/字典进程之外的列表做任何事情时,我是否应该坚持常规的第一个循环?
我已经阅读了可能的重复问题,它回答了我的问题,因为每当我需要修改列表中的项目时,我都需要循环索引,但是我仍然想知道循环通过索引的循环之间是否有任何语言描述和一个循环遍历列表元素的循环,就像我的第二个循环一样。
解决方案
第二个循环:
for word in listOfStringsCopy:
word = "something else"
没有修改现有列表,因为您实际上不是修改列表,而是重新绑定变量 ie word
,这显然是我们希望它工作的方式。
这相当于:
x = [1,2,3,4,5]
y = x[0]
y = "something else"
现在,y 不是指列表 x 的第一个元素,而是指一个字符串“其他东西”。
推荐阅读
- c# - 为什么 AddListener 不回拨?
- javascript - 有没有办法编辑 javascript 函数以在 html 表单输出中实时更新?
- mbed - 如何在 Mbed OS 中设置特定的 LoRa 扩展因子
- linux - 在 docker 主机中无法访问在 docker 容器中运行的应用程序
- pypy - Python:需要关于运行它的帮助
- excel - 复制一个单元格并粘贴到一系列单元格中的第一个空白行
- r - 如何使用 RPostgreSQL 使用数据框更新数据库中的表
- rust - 如何在 Rust 中将布尔值转换为整数?
- kendo-ui-angular2 - 如何将 JAN 添加到 Kendo DatePicker (Angular2) 弹出左侧导航中,它当前显示年份,然后是 FEB
- c# - 从 C++ 到 C# 获取复杂的结构