python列表迭代期间的元素修改

时间:2018-12-28 18:20:26

标签: python

请问有人在迭代过程中向“元素”解释以下代码中到底发生了什么?

array = [2,3,4]
for element in array:
    element = 3
print(array)
  
    
      

>>>[2, 3, 4]

    
  

输出为[2,3,4]     而不是[3,3,3]

我是否正确理解,当使用“ for l中的元素”语法时,我们只能引用但不能修改数组中的每个元素,这里发生了什么?

P.S。我已经看到了一个名为“为什么不像'for数组中的元素'那样进行迭代”的问题,但是我找不到那个,所以我以这种方式提出了这个问题。似乎我发现了以这种方式进行迭代的缺点之一。请尽可能将我重定向到上述问题。

3 个答案:

答案 0 :(得分:2)

说明

在上面的示例中,不可能对循环中的变量元素进行任何更改。

代码

要获得预期的输出,请尝试以下操作:

array = [2,3,4]
for i in range(len(array)):
    array[i] = 3
print(array)

答案 1 :(得分:0)

当迭代开始元素变量在数组中已经具有当前值时。当您为其分配3时,它将包含它直到下一次迭代时才再次获取数组的当前值,依此类推。 要获得[3,3,3],您需要执行以下操作:

array = [2,3,4]
for i in range(0,len(array)):
    array[i]=3
print(array)

答案 2 :(得分:0)

这是因为elementfor循环范围内的局部变量。

运行此代码段。我希望它可以不言自明(我使用e而不是element),也希望使用enumerate来获取索引:

array = [2,3,4]
for i, e in enumerate(array):
    print('i =', i, 'e =', e)
    e = 100
    print('e = 100-->','e =', e, 'but array[i]=',array[i])
    array[i] = e
    print('array[i] = e --> array[i]=',array[i])
    print('-'*10)

print(array) #=> [100,100,100]


快速说明

ei是局部变量,它们在每次迭代时接收元素的值和array的索引。 在循环内部,您可以更改e的值,但不会影响array。要更改array中的值,需要通过索引(array[i])来访问它。