我是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”会为你解除引用并让你访问对象的值吗?
答案 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循环中的不同输出