Python foreach equivalente [duplicate]

4 minutos de lectura

avatar de usuario
Factura

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 en todos los elementos de mi colección, por ejemplo.

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

o algo como esto.

Por supuesto. Un bucle for.

for f in pets:
    print f

  • ¿Qué pasa si también debo saber el índice/clave?

    – candelero

    25 de enero de 2018 a las 5:43

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

    – Hannu

    25 de enero de 2018 a las 10:10

  • Desafortunadamente, esta construcción no es intrínseca a las colecciones, sino externa a ellas. El resultado es doble: (1) no se puede encadenar (2) requiere dos líneas en Python idiomático. Python no admite un verdadero foreach en las colecciones directamente. o encadenamiento en general. Un ejemplo hubiera sido “myList.foreach( a => print(a)).map( lambda x: x*2)`.

    – Proyectos de la costa oeste

    19 de diciembre de 2020 a las 10:41

Como esto:

for pet in pets :
  print(pet)

De hecho, Pitón solamente tiene estilo foreach for bucles

avatar de usuario
krishna

También es interesante observar este

Para iterar sobre los índices de una secuencia, puede combinar range() y len() como sigue:

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

producción

0 Mary
1 had
2 a
3 little
4 lamb

Edición n. ° 1: forma alternativa:

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

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

producción

0 tic
1 tac
2 toe

avatar de usuario
Roberto Mennell

Para una respuesta actualizada, puede crear un forEach función en Python fácilmente:

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

También podrías adaptar esto a map, reduce, filter, y cualquier otra función de matriz de otros idiomas o precedencia que desee traer. Los bucles for son lo suficientemente rápidos, pero la placa de la caldera es más larga que forEach o las otras funciones. También puede extender la lista para tener estas funciones con un puntero local a una clase para que también pueda llamarlas directamente en las listas.

Si bien las respuestas anteriores son válidas, si está iterando sobre un dict {clave: valor}, 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 encadenar 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, que puede causar un comportamiento errático (a veces) en mi experiencia.

  • Una alternativa más legible a esto es iterar sobre un copy del diccionario, por lo que puede manipular el diccionario durante la iteración (aunque su copia será de todas las claves y valores antes de cualquier modificación), como for key, value in Dictionary.copy().items()

    – Marc Maxmeister

    23 oct 2019 a las 21:25

avatar de usuario
armaan s

Para un dict, podemos usar un ciclo for para iterar a través del index, key y value:

dictionary = {'a': 0, 'z': 25}
for index, (key, value) in enumerate(dictionary.items()):
     ## Code here ##

  • Una alternativa más legible a esto es iterar sobre un copy del diccionario, por lo que puede manipular el diccionario durante la iteración (aunque su copia será de todas las claves y valores antes de cualquier modificación), como for key, value in Dictionary.copy().items()

    – Marc Maxmeister

    23 oct 2019 a las 21:25

avatar de usuario
ProyectosCostaOeste

los foreach Desafortunadamente, la construcción no es intrínseca a las colecciones, sino externa a ellas. El resultado es doble:

  • no se puede encadenar
  • requiere dos líneas en python idiomático.

Python no admite un verdadero foreach en las colecciones directamente. un ejemplo seria

myList.foreach( a => print(a)).map( lambda x:  x*2)

Pero Python no lo admite. Varias bibliotecas de terceros proporcionan soluciones parciales a esta y otras características funcionales que faltan en python, incluida una que ayudé a crear: ver https://pypi.org/proyecto/infixpy/

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad