Equivalent Python foreach


207

Je plonge dans Python et j'ai une question sur chaque itération. Je suis nouveau sur Python et j'ai une certaine expérience en C #. Je me demande donc s'il existe une fonction équivalente en Python pour une itération sur tous les éléments de ma collection, par exemple

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

ou quelque chose comme ça.


2
Possible duplication de Y a
Stephan Weinhold

Réponses:


316

Sûr. Une boucle for.

for f in pets:
    print f

Et si je dois également connaître l'index / la clé?
candlejack

27
Ensuite, vous utiliseriez enumerate. for k,v in enumerate(pets): etc.
Hannu

32

Comme ça:

for pet in pets :
  print(pet)

En fait, Python n'a que desfor boucles de style foreach .


14

Il est également intéressant d'observer cela

Pour parcourir les indices d'une séquence, vous pouvez combiner range()et len()comme suit:

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

production

0 Mary
1 had
2 a
3 little
4 lamb

Edit # 1: Autre manière:

Lors du bouclage d'une séquence, l'index de position et la valeur correspondante peuvent être récupérés en même temps à l'aide de la enumerate()fonction.

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

production

0 tic
1 tac
2 toe

4

Pour une réponse mise à jour, vous pouvez forEachfacilement créer une fonction en Python:

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

Vous pouvez également adapter cela map, reduce, filteret toutes les autres fonctions de tableau d'autres langues ou la priorité que vous voudriez faire plus. Les boucles For sont assez rapides, mais la plaque de la chaudière est plus longue que forEachles autres fonctions. Vous pouvez également étendre list pour avoir ces fonctions avec un pointeur local vers une classe afin de pouvoir les appeler directement sur les listes.


1
Pouvez-vous inclure l'utilisation s'il vous plaît?
ScottyBlades

3

Bien que les réponses ci-dessus soient valides, si vous itérez sur un dict {clé: valeur}, c'est l'approche que j'aime utiliser:

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

Par conséquent, si je voulais faire quelque chose comme stringify toutes les clés et valeurs de mon dictionnaire, je ferais ceci:

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

Cela évite tout problème de mutation lors de l'application de ce type d'itération, ce qui peut entraîner un comportement erratique (parfois) selon mon expérience.


Une alternative plus lisible à cela est d'itérer sur un copydu dictionnaire, afin que vous puissiez manipuler le dictionnaire pendant l'itération (bien que votre copie soit de toutes les clés et valeurs avant toute modification) - commefor key, value in Dictionary.copy().items()
Marc Maxmeister

1

Pour un dict, nous pouvons utiliser une boucle for pour parcourir le index, keyet value:

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

0

Cela a fonctionné pour moi:

def smallest_missing_positive_integer(A):
A.sort()
N = len(A)

now = A[0]
for i in range(1, N, 1):
  next = A[i]
  
  #check if there is no gap between 2 numbers and if positive
  # "now + 1" is the "gap"
  if (next > now + 1):
    if now + 1 > 0:
      return now + 1 #return the gap
  now = next
    
return max(1, A[N-1] + 1) #if there is no positive number returns 1, otherwise the end of A+1
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.