2011-06-30 34 views
14

問題: 當您使用建設變化值

for a in _list_: 
    print a 

它打印在每一個數組項。但是你不能改變數組。是否有可能改變數組的值(類似於= 123,但這是行不通的) 我知道這是可能的(例如在while循環中),但我想這樣做(更優雅)

在PHP它會像

foreach ($array as &$value) { 
    $value = 123; 
} 

(因爲&跡象,作爲引用傳遞)

回答

28
for idx, a in enumerate(foo): 
    foo[idx] = a + 42 

不過請注意,如果你這樣做,你應該看看列表解析(或map),除非你r最後想要就地變異(只是不要插入或從迭代列表中刪除項目)。

寫成一個列表理解同一迴路的樣子:

foo = [a + 42 for a in foo] 
6

因爲Python迭代器只是一個「標籤」到內存中的對象,設置它將使只是指向別的東西。

如果迭代器是一個可變對象(列表,集合,字典等),您可以修改它並在同一個對象中查看結果。

>>> a = [[1,2,3], [4,5,6]] 
>>> for i in a: 
... i.append(10) 
>>> a 
[[1, 2, 3, 10], [4, 5, 6, 10]] 

如果你想設置的各個值,比方說,123,你既可以用列表索引和訪問,或使用list comprehension

>>> a = [1,2,3,4,5] 
>>> a = [123 for i in a] 
>>> a 
[123, 123, 123, 123, 123] 

但是,你將創建另一個列表綁定到相同的名稱。