使用for和in修改数组中的元素

时间:2014-07-11 22:47:54

标签: python arrays for-loop int

为什么代码:

lista=['1','2','3','4']
for element in lista:
    element=int(element)

在以下代码有效的情况下无法工作?

lista=['1','2','3','4']
for i in range(len(lista)):
    lista[i]=int(lista[i])

Obs:我使用的是Python 3.4。

2 个答案:

答案 0 :(得分:1)

在将int(element)分配给element时的第一个循环中,它会创建一个新的整数对象,并将其分配给名称element

在第二个循环中,您将int(lista[i])分配给lista[i],这会使用该值更新列表的i元素。

这可以帮助您更好地理解它。

>>> lista
['1', '2', '3', '4']
>>> i = lista[0]      # i points to first element of lista
>>> i
'1'
>>> i = 'a'           # Now i points to a new object 'a'
>>> lista             # So lista remains as it was before
['1', '2', '3', '4']
>>> lista[0] = 'a'    # Here we are replacing the first element of lista with 'a'
>>> lista
['a', '2', '3', '4']

阅读immutable and mutable objects in Python

BTW你想做的是这个 -

for i, element in enumerate(lista):
    lista[i] = int(element)

执行此特定循环的Pythonic方法是使用list comprehension -

>>> lista=['1','2','3','4']
>>> lista = [int(element) for element in lista]
>>> lista
[1, 2, 3, 4]

答案 1 :(得分:0)

这是有效的,因为您将列表中的每个插槽分配给一个新项目:

lista=['1','2','3','4']
for i in range(len(lista)):
    lista[i]=int(lista[i])

下面的“有效”,但它没有按照您的意图执行,因为您只是将元素分配给变量名称,然后为该名称指定转换,然后不对其执行任何操作。:

lista=['1','2','3','4']
for element in lista:
    element=int(element)
    # try printing type(element) here to see that int actually does return an int