为什么代码:
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。
答案 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