2011-06-30 18 views
14

sorun: Eğer inşaa edilmesinedeğiştirme değeri

for a in _list_: 
    print a 

kullandığınızda o dizide her öğe yazdırır. Ama diziyi değiştiremezsin. Dizinin değerini değiştirmek mümkün mü (a = 123 gibi bir şey, ama bu işe yaramaz) Mümkün olduğunu biliyorum (örneğin, döngüde), ama ben bu şekilde yapmak istiyorum (daha zarif)

PHP yılında bunu yaptığını, muhtemelen liste comprehensions içine bakmak gerektiğini,

cevap

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

Not olsa

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

(referans olarak geçirilir nedeniyle & işareti) gibi olurdu (veya map) eally yerinde mutasyona girmek (sadece iterated-on listeden öğeleri eklemeyin veya kaldırmayın). piton yineleyiciler bellekte bir nesneye sadece bir "etiket" Çünkü o sadece başka bir şeye işaret yapacaktır ayarı,

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

:

bir liste anlama olarak yazılır aynı döngü gibi görünüyor.

Yineleyici değiştirilebilen bir nesne ise (liste, ayar, taslak vb.) Değiştirebilir ve sonucu aynı nesnede görebilirsiniz. Eğer diyelim ki, her değerini ayarlamak istiyorsanız

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

, 123 liste indeksi ve erişimini kullanabilir veya bir list comprehension kullanabilirsiniz ya:

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

Ama başka bir liste oluşturmak olacak ve onu aynı adaya bağla.