【问题标题】:Modifing element in array using for and in使用 for 和 in 修改数组中的元素
【发布时间】:2014-07-11 22:47:53
【问题描述】:

为什么要代码:

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。

【问题讨论】:

  • element 是值的副本,而不是对其的引用。
  • @LucasVirgili 在哪个阶段?在for 循环分配中,该声明完全错误。在int 分配之后,它几乎是正确的。
  • 您为什么认为第一个版本起作用?您可以看到两个版本之间的区别,那么为什么您认为第一个不起作用?
  • @jonrsharpe 只是与众不同,什么都不解释。此外,如果我能看到两个版本之间的区别,我什至不会提出这个问题。

标签: python arrays for-loop int


【解决方案1】:

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

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

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

>>> 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

顺便说一句,你想在这里做的是这个 -

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]

【讨论】:

【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2022-07-07
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 2021-12-16
    • 2013-01-21
    • 2012-05-20
    • 1970-01-01
    相关资源
    最近更新 更多