2011-06-30 11 views
14

Problem: podczas korzystania BudowaZmiana wartości aktualnie powtórzyć elementu w liście

for a in _list_: 
    print a 

drukuje każdy element w tablicy. Ale nie możesz zmienić tablicy. Czy jest możliwa zmiana wartości tablicy (coś jak a = 123, ale to nie działa) Wiem, że to możliwe (na przykład w pętli while), ale chcę to zrobić w ten sposób (bardziej elegancko)

W PHP byłoby jak

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

(z powodu & znak, jest przekazywana jako odniesienie)

Odpowiedz

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

Uwaga jednak, że jeśli robisz to, to prawdopodobnie należy szukać w listowych (lub map), chyba że r eally chce mutować w miejscu (po prostu nie wkładaj ani nie usuwaj elementów z listy iterowanej).

tej samej pętli napisany jako listowego wygląda następująco:

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

Ponieważ iteratory python to tylko „label” do obiektu w pamięci, ustawienie pozwoli on tylko wskazać na coś innego.

Jeśli iterator jest zmiennym obiektem (lista, zestaw, dykt itp.), Możesz go zmodyfikować i zobaczyć wynik w tym samym obiekcie.

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

Jeśli chcesz ustawić każdą wartość, powiedzmy, 123 można użyć indeksu listy i do niego dostęp lub użycie list comprehension:

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

Ale będziesz tworzenia innej listy i wiążąc go z tą samą nazwą.

Powiązane problemy