Python foreach equivalente


191

Me estoy sumergiendo en Python y tengo una pregunta sobre la iteración foreach. Soy nuevo en Python y tengo algo de experiencia en C #. Así que me pregunto si hay alguna función equivalente en Python para la iteración de todos los elementos de mi colección, p. Ej.

pets = ['cat', 'dog', 'fish']
marks = [ 5, 4, 3, 2, 1]

o algo como esto.


Respuestas:


294

Por supuesto. Un bucle for.

for f in pets:
    print f

¿Qué pasa si también debo conocer el índice / clave?
Vela el

25
Entonces usarías enumerate. for k,v in enumerate(pets): etc.
Hannu

30

Me gusta esto:

for pet in pets :
  print(pet)

De hecho, Python solo tiene forbucles de estilo foreach .


12

También es interesante observar esto

Para iterar sobre los índices de una secuencia, puede combinar range()y de la len()siguiente manera:

a = ['Mary', 'had', 'a', 'little', 'lamb']
for i in range(len(a)):
  print(i, a[i])

salida

0 Mary
1 had
2 a
3 little
4 lamb

Editar # 1: forma alternativa:

Al recorrer una secuencia, el índice de posición y el valor correspondiente se pueden recuperar al mismo tiempo utilizando la enumerate()función.

for i, v in enumerate(['tic', 'tac', 'toe']):
  print(i, v)

salida

0 tic
1 tac
2 toe

4

Para obtener una respuesta actualizada, puede crear una forEachfunción en Python fácilmente:

def forEach(list, function):
    for i, v in enumerate(list):
        function(v, i, list)

También se podría adaptar esta a map, reduce, filter, y cualesquiera otras funciones de matriz de otros idiomas o precedencia Lo que quiere llevar más. Los bucles son lo suficientemente rápidos, pero la placa de la caldera es más larga que forEachotras funciones. También puede extender la lista para tener estas funciones con un puntero local a una clase para poder llamarlas directamente en las listas también.


1
¿Puedes incluir el uso por favor?
ScottyBlades

3

Si bien las respuestas anteriores son válidas, si está iterando sobre un dict {key: value}, este es el enfoque que me gusta usar:

for key, value in Dictionary.items():
    print(key, value)

Por lo tanto, si quisiera hacer algo como stringify todas las claves y valores en mi diccionario, haría esto:

stringified_dictionary = {}
for key, value in Dictionary.items():
    stringified_dictionary.update({str(key): str(value)})
return stringified_dictionary

Esto evita cualquier problema de mutación al aplicar este tipo de iteración, lo que puede causar un comportamiento errático (a veces) en mi experiencia.


Una alternativa más legible a esto es iterar sobre uno copyde los diccionarios, para que pueda manipular el diccionario durante la iteración (aunque su copia será de todas las claves y valores antes de cualquier modificación) - comofor key, value in Dictionary.copy().items()
Marc Maxmeister el

1

Para un dict podemos usar un bucle for para iterar a través de index, keyy value:

dictionary = {'a': 0, 'z': 25}
for index, (key, value) in enumerate(dictionary.items()):
     ## Code here ##
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.