为什么在 Python 循环中修改列表元素没有结果
在用 Python 遍历列表时,许多程序员遇到了一个意想不到的障碍:无法通过传统循环修改其元素。举例说明:
li = ["spam", "eggs"] for i in li: i = "foo" print(li) # Output: ["spam", "eggs"]
尽管明显将“foo”分配给列表元素,但列表保持不变。这种令人困惑的行为源于 Python 处理列表循环的方式。
在幕后,Python 循环通过迭代列表的索引进行操作。在上面的示例中,对于每个索引(对应于列表中的一项),都会创建一个新的临时变量 i。对 i 的赋值仅影响此局部变量,而不影响实际的列表元素。
要成功修改列表元素,必须使用列表理解,如提供的示例中所示:
li = ["foo" for i in li] print(li) # Output: ["foo", "foo"]
或者,直接迭代索引:
for idx in range(len(li)): li[idx] = "foo" print(li) # Output: ["foo", "foo"]
或者,利用 enumerate()函数:
for idx, item in enumerate(li): li[idx] = "foo" print(li) # Output: ["foo", "foo"]
通过采用这些解决方案,程序员可以自信地修改循环内的列表元素,避免导致列表不变的徒劳分配。
以上是为什么直接在 Python 循环中修改列表元素不起作用?的详细内容。更多信息请关注PHP中文网其他相关文章!