首页 > 解决方案 > 在 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]

标签: pythonlistloopsfor-loopvariable-assignment

解决方案


没有办法分配一个裸名 ( 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)

推荐阅读