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.

Cuenta
fuente
2
Posible duplicado de ¿Hay una función 'foreach' en Python 3?
Stephan Weinhold

Respuestas:

294

Por supuesto. Un bucle for.

for f in pets:
    print f
Hannu
fuente
¿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 .

Jack Aidley
fuente
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
Krishna
fuente
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.

Robert Mennell
fuente
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.

Marc Tanne
fuente
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 ##
Armaan Salam
fuente