python - 在 for 循环期间为列表中的项目分配新值不起作用?
问题描述
我有一个项目清单。在 for 循环中,我检查项目是否为 3。如果是 3,则应将 3 更改为 2。这是我想到使用 for 循环的两种方式。但只有最后一个有效。
有没有一种方法可以使第一个 for 循环工作而不会失去其“pythonic”风格?
a = [1, 2, 3]
for num in a:
if num == 3:
num = 2
# -> [1, 2, 3]
for i in range(len(a)):
if a[i] == 3:
a[i] = 2
# -> [1, 2, 2]
解决方案
没有办法分配一个裸名 ( num
) 并让它影响一个容器 (list a
)。您需要使用索引。虽然,它更 Pythonic 使用enumerate
:
for i, num in enumerate(a):
if num == 3:
a[i] = 2
另一种选择是使用全切片赋值从生成器表达式中完全覆盖列表的内容:
a[:] = (2 if num==3 else num for num in a)
推荐阅读
- oracle - 需要更新 oracle register xml schema 中的一个属性
- angularjs - 范围变量如何使用 angularjs 在 jasmine 框架中访问
- git - 如何在詹金斯文件中签出触发的构建分支详细信息
- scala - 需要 scala 中的示例程序用于 spark 数据帧
- android - Android 不会在 CardView 中将视图显示为行
- node.js - 我想知道如何使用 Puppeteer 的 $$eval
- python - 使用python3将json数据转换为csv但它不起作用
- python - 以管理员身份运行时是否可以从 python/batch 获取本地用户名?
- c++ - 使用反向引用移动多态成员的构造函数
- javascript - 无法使用 nuxt 中的 axios 从正确位置获取