2011-06-30 14 views
14

problema: cuando se utiliza la construcciónModificar el valor de elemento iterado actualmente en la lista

for a in _list_: 
    print a 

imprime todos los elementos de matriz. Pero no puedes alterar la matriz. ¿Es posible alterar el valor de la matriz (algo así como a = 123, pero eso no funciona) Sé que es posible (por ejemplo, en el ciclo while), pero quiero hacerlo de esta manera (más elegante)

En PHP sería como

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

(debido & señal, se pasa como referencia)

Respuesta

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

en cuenta sin embargo, que si usted está haciendo esto, es probable que debe buscar en las listas por comprensión (o map), a menos que Todos quieren mutar en su lugar (simplemente no inserte ni elimine elementos de la lista iterada).

El mismo bucle escrita como una lista por comprensión se ve como:

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

Debido iteradores pitón son sólo una "etiqueta" a un objeto en la memoria, el establecimiento que hará que sea simplemente apunte a otra cosa.

Si el iterador es un objeto mutable (list, set, dict, etc.) puede modificarlo y ver el resultado en el mismo objeto.

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

Si desea configurar cada valor de, digamos, 123 También se puede usar el índice de la lista y acceder a ella o utilizar un list comprehension:

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

Pero que va a crear otra lista y uniéndolo al mismo nombre.

Cuestiones relacionadas