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.


Odpowiedzi:


294

Pewnie. Pętla for.

for f in pets:
    print f

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 .


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

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.


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.


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 ##
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.