繁体   English   中英

Python:更改列表中的元素

[英]Python: Changing Elements in List

我观察这种奇怪的行为已有一段时间了。 现在我想知道原因。

请参见下面的示例。

有人可以解释原因-以及是否还有其他选项与第一个版本更相似,而第二个版本却可以完成。

>>> a
>>> [1, 0, 1, 1]

>>> for el in a:
        el = 1

>>> a
>>> [1, 0, 1, 1]

>>> for i in range(len(a)):
        a[i] = 1

>>> a
>>> [1, 1, 1, 1]

您的第一个片段:

for el in a:

获取项目的唯一值的a ,他们没有列表中的项目引用。 因此,当您尝试重新分配它时,仅更改el的值,而不更改列表中的项目。

虽然这样:

a[i]

检索的项目a自己,而不仅仅是值。

要更改的所有值a ,你可以创建一个新的副本,并重新分配回a

a = [1 for _ in a]

这是最有效的方法。 如果要同时拥有值和索引来重新分配它,请使用enumerate

for index, el in enumerate(a):
    print el #print the current value
    a[index] = 1 #change it,
    print el #and print the new one!

希望这可以帮助!

我通常最终使用这样的东西:

a = [1 for el in a]

列表理解是我更新列表中避免索引的项目的首选方式。

Pythons变量是对象的名称,而不是内存中位置的名称。 于是

el = 1

不更改el指向的对象为1 相反,它现在使el指向对象1 它根本不会修改列表中的任何内容。 为此,您必须直接修改列表:

a[2] = 1

快速枚举给出了元素的不变副本,因此在速度上优于索引迭代方法。

for el in a:# el is immutable

在哪里

for i in range(len(a)):
        a[i] = 1

修改其内存位置的值,因为listname[<index>]实际上是baseaddress+index*offset 索引从零开始的原因之一

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM