2024-05-19 15:21:23 发布
网友
>>> n = [1, 2, 3] >>> for item in n: ... item *= 2 ... >>> print n [1, 2, 3]
我希望上面代码的结果是[2,4,6],但显然不是这样。 然后我试了for i in range(n),如下所示
for i in range(n)
看来没问题。 我的问题是,这两个for循环方法的本质区别是什么?是什么原因导致了上述意外结果?在
for
item只是一个本地名称。它最初由for循环指定为指向当前元素,但如果将其重新指定为指向其他元素,则对原始元素没有影响。在
item
但如果使用索引引用原始列表中的元素,则可以对该列表进行变异以包含不同的值。在
如果有帮助,第一个循环相当于:
for i in range(len(n)): item = n[i] item *= 2
换句话说,它首先将item绑定到列表的i-第个元素,然后将其重新绑定到一个新对象,该对象的值是i-第个元素的两倍。它不会更改列表的任何元素。在
i
实现此循环的一个好方法是使用列表理解:
不能修改表示当前迭代的对象。 实际上,你可以,但是它不会改变列表中的对象。在
what's the essential difference between these two for loop method?
在第一个示例中,迭代列表中的对象(并尝试直接修改该对象-它不会更改列表的元素本身)。 然后在第二个例子中迭代整数列表(并实际修改给定列表的元素,从而修改列表内容)。在
item
只是一个本地名称。它最初由for循环指定为指向当前元素,但如果将其重新指定为指向其他元素,则对原始元素没有影响。在但如果使用索引引用原始列表中的元素,则可以对该列表进行变异以包含不同的值。在
如果有帮助,第一个循环相当于:
换句话说,它首先将
item
绑定到列表的i
-第个元素,然后将其重新绑定到一个新对象,该对象的值是i
-第个元素的两倍。它不会更改列表的任何元素。在实现此循环的一个好方法是使用列表理解:
^{pr2}$不能修改表示当前迭代的对象。
实际上,你可以,但是它不会改变列表中的对象。在
在第一个示例中,迭代列表中的对象(并尝试直接修改该对象-它不会更改列表的元素本身)。
然后在第二个例子中迭代整数列表(并实际修改给定列表的元素,从而修改列表内容)。在
相关问题 更多 >
编程相关推荐