[英]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.