循环迭代的基础。蟒蛇

时间:2014-01-15 15:14:39

标签: python for-loop

我是Python语言的新手,并且在过去的两年里使用过C ++。我试图理解为什么这两个代码会产生不同的结果:

第一个for循环:

l1=[1,2,3,4,5]
for i in l1:
    i+=10

print l1
# [1,2,3,4,5]

第二个for循环:

l1=[1,2,3,4,5]

for i in range(len(l1)):
    l1[i]+=10

print l1
# [11,12,13,14,15]

为什么第一个循环不会产生相同的结果?我认为“for i in object”会为你解除引用并让你访问对象的值吗?

4 个答案:

答案 0 :(得分:1)

第一个示例没有给出与第二个示例相同的结果,因为您只对存储在列表中的进行操作,而不是对列表元素本身进行操作。使用切片表示法l1[i]+=10时,您正在对列表元素执行操作,并更改列表中存储的值。

答案 1 :(得分:1)

在第一个示例中,您正在改变列表,而不是通过它来改变它并且您正在改变您创建的i变量

但是,在第二个示例中,您索引li,因此您直接执行其项目,而不是分配项目值的变量

答案 2 :(得分:0)

第一个循环中的

i是标量值,并从l1复制,但第二个循环中的l1[i]直接修改数组中的数据。

答案 3 :(得分:0)

第一循环: i是迭代变量,它在每次迭代中从l1获取值。 在第一次迭代中,我是1。 在循环内部和

之后
i+=10

我将等于11。

在第二次迭代中,i被赋予替换值11的值2(l1列表上的第二个值)。 等等... 该列表不会以这种方式修改。

第二循环: 我再次从l1中的值中获取值。 现在您正在使用:

l1[i]+=10

实际上是修改了列表内容。

这解释了第二个for循环中的不同输出