【发布时间】:2013-04-09 14:22:53
【问题描述】:
如果我有以下列表:
a = [1, 2, 3]
然后我运行以下代码:
for x in a:
x += 1
看来这并没有改变列表a。
但是,如果我执行以下操作:
for i in range(0, len(a)):
a[i] += 1
这会修改'a'的内容。
所以我猜x 和a[i] 以不同的方式指代a 的元素。究竟是什么导致了这种差异?它们各自如何引用a 的元素?
【问题讨论】:
-
值得注意的是,像这样按索引循环通常是一个非常糟糕的主意,如果您想修改列表的每个元素,请考虑使用list comprehension。 (这确实会创建一个新列表,但这很少会成为问题,如果需要,将修改推送回原始列表是微不足道的。)
-
This visualisation 也应该提供一些见解。
-
投反对票,因为这个问题显然是重复的。
-
@Lattyware 您好,感谢您的评论!我想知道为什么这是一个非常糟糕的主意?这比列表理解慢吗?
-
@Enzo 它速度较慢,可读性较差,并且仅适用于列表,而不适用于通用迭代器(例如,这意味着您无法利用 Python 的惰性生成器)。一般来说,按索引迭代并不是解决 Python 问题的最佳方式。