Python foreach equivalente


191

Estou mergulhando no Python e tenho uma pergunta sobre cada iteração. Eu sou novo no Python e tenho alguma experiência em c #. Então, eu estou pensando, se existe alguma função equivalente no Python para iteração em todos os itens da minha coleção, por exemplo

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

ou algo parecido com isto.


Respostas:


294

Certo. Um loop for.

for f in pets:
    print f

E se eu precisar conhecer o índice / chave também?
candlejack

25
Então você usaria enumerar. for k,v in enumerate(pets): etc
Hannu

30

Como isso:

for pet in pets :
  print(pet)

De fato, o Python possui apenasfor loops de estilo foreach .


12

Também é interessante observar isso

Para iterar sobre os índices de uma sequência, você pode combinar range()e len()como segue:

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

resultado

0 Mary
1 had
2 a
3 little
4 lamb

Edição # 1: Maneira alternativa:

Ao percorrer uma sequência, o índice de posição e o valor correspondente podem ser recuperados ao mesmo tempo usando a enumerate()função

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

resultado

0 tic
1 tac
2 toe

4

Para uma resposta atualizada, você pode criar uma forEachfunção no Python facilmente:

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

Você também pode adaptar isso para map, reduce, filter, e quaisquer outras funções de matriz de outros idiomas ou precedência que você gostaria de trazer mais. Os loops são rápidos o suficiente, mas a placa da caldeira é mais longa que forEachas outras funções. Você também pode estender a lista para ter essas funções com um ponteiro local para uma classe, para poder chamá-las diretamente nas listas.


1
Você pode incluir o uso, por favor?
ScottyBlades

3

Embora as respostas acima sejam válidas, se você estiver repetindo um ditado {key: value}, é esta a abordagem que eu gosto de usar:

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

Portanto, se eu quisesse fazer algo como stringify todas as chaves e valores no meu dicionário, faria o seguinte:

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

Isso evita qualquer problema de mutação ao aplicar esse tipo de iteração, o que pode causar comportamento irregular (às vezes) na minha experiência.


Uma alternativa mais legível para isso é iterar um copydo dicionário, para que possa manipular o dicionário durante a iteração (embora a sua cópia será de todas as chaves e valores antes de qualquer modificação) - comofor key, value in Dictionary.copy().items()
Marc Maxmeister

1

Para um ditado, podemos usar um loop for para iterar através de index, keye value:

dictionary = {'a': 0, 'z': 25}
for index, (key, value) in enumerate(dictionary.items()):
     ## Code here ##
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.