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.

Facture
la source
2
Possible duplication de Y a
Stephan Weinhold

Réponses:

316

Sûr. Une boucle for.

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

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

Robert Mennell
la source
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.

Marc Tanne
la source
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 ##
Armaan Salam
la source
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
Victor
la source