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