Python odpowiednik foreach

191

Nurkuję w Pythonie i mam pytanie dotyczące iteracji Foreach. Jestem nowy w Pythonie i mam pewne doświadczenie w C #. Zastanawiam się więc, czy w Pythonie jest jakaś równoważna funkcja do iteracji wszystkich elementów w mojej kolekcji, np

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

lub coś w tym stylu.

Rachunek
źródło
2
Możliwy duplikat Czy w Pythonie 3 jest funkcja „foreach”?
Stephan Weinhold

Odpowiedzi:

294

Pewnie. Pętla for.

for f in pets:
    print f
Hannu
źródło
Co jeśli muszę znać indeks / klucz?
candlejack
25
Następnie użyłbyś wyliczenia. for k,v in enumerate(pets): itp.
Hannu,
30

Lubię to:

for pet in pets :
  print(pet)

W rzeczywistości Python ma tylkofor pętle stylu foreach .

Jack Aidley
źródło
12

Interesujące jest również to zaobserwować

Aby iterować po indeksach sekwencji, możesz połączyć range()i wykonać len()następujące czynności:

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

wynik

0 Mary
1 had
2 a
3 little
4 lamb

Edycja nr 1: Alternatywny sposób:

Podczas zapętlania sekwencji indeks pozycji i odpowiadająca jej wartość mogą być odczytane w tym samym czasie za pomocą enumerate()funkcji.

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

wynik

0 tic
1 tac
2 toe
krishna
źródło
4

Aby uzyskać zaktualizowaną odpowiedź, możesz łatwo zbudować forEachfunkcję w Pythonie:

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

Można również dostosować się do tego map, reduce, filter, oraz wszelkie inne funkcje tablicy z innych języków lub pierwszeństwa pan chciałby przynieść ponad. Pętle są wystarczająco szybkie, ale płyta kotła jest dłuższa forEachlub inne funkcje. Możesz także rozszerzyć listę, aby mieć te funkcje za pomocą lokalnego wskaźnika do klasy, abyś mógł wywoływać je również bezpośrednio na listach.

Robert Mennell
źródło
1
Czy możesz podać użycie?
ScottyBlades
3

Chociaż powyższe odpowiedzi są poprawne, jeśli wykonujesz iterację nad dykcie {klucz: wartość}, jest to podejście, które lubię stosować:

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

Dlatego gdybym chciał zrobić coś takiego jak strifyfikowanie wszystkich kluczy i wartości w moim słowniku, zrobiłbym to:

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

Pozwala to uniknąć problemów z mutacją podczas stosowania tego typu iteracji, które mogą powodować nieprawidłowe zachowanie (czasami) z mojego doświadczenia.

Marc Tanne
źródło
Bardziej czytelną alternatywą jest iteracja nad copysłownikiem, abyś mógł manipulować słownikiem podczas iteracji (chociaż twoja kopia będzie for key, value in Dictionary.copy().items()
zawierała
1

Dla dict możemy użyć dla pętli do iterację index, keya value:

dictionary = {'a': 0, 'z': 25}
for index, (key, value) in enumerate(dictionary.items()):
     ## Code here ##
Armaan Salam
źródło