Python foreach эквивалент


192

Я погружаюсь в Python, и у меня есть вопрос об итерации foreach. Я новичок в Python, и у меня есть некоторый опыт в C #. Поэтому мне интересно, есть ли в Python эквивалентная функция для итерации по всем элементам в моей коллекции, например

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

или что-то вроде этого.


Ответы:


295

Конечно. А для цикла.

for f in pets:
    print f

А что если я тоже должен знать индекс / ключ?
подсвечник

25
Тогда вы будете использовать перечислять. for k,v in enumerate(pets): и т.д.
Ханну


12

Также интересно наблюдать за этим

Чтобы перебрать индексы последовательности, вы можете комбинировать range()и len()следующим образом:

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

вывод

0 Mary
1 had
2 a
3 little
4 lamb

Редактировать # 1: Альтернативный способ:

При циклическом выполнении последовательности индекс позиции и соответствующее значение могут быть получены одновременно с помощью enumerate()функции.

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

вывод

0 tic
1 tac
2 toe

4

Для получения обновленного ответа вы можете легко построить forEachфункцию в Python:

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

Вы можете также приспособить это map, reduce, filter, и любые другие функции массива из других языков или старшинств вы хотите переубедить. Ибо петли достаточно быстрые, но котельная плита длиннее forEachили других функций. Вы также можете расширить список, чтобы иметь эти функции с локальным указателем на класс, чтобы вы могли вызывать их непосредственно в списках.


1
Можете ли вы включить использование, пожалуйста?
ScottyBlades

3

Хотя приведенные выше ответы верны, если вы перебираете dict {key: value}, то этот подход мне нравится использовать:

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

Поэтому, если бы я хотел сделать что-то вроде строкового преобразования всех ключей и значений в моем словаре, я бы сделал это:

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

Это позволяет избежать каких-либо проблем с мутациями при применении этого типа итерации, что может вызвать ошибочное поведение (иногда) в моем опыте.


Более читаемой альтернативой этому является copyитерация по словарю, так что вы можете манипулировать словарем во время итерации (хотя ваша копия будет иметь все ключи и значения до любой модификации) - какfor key, value in Dictionary.copy().items()
Marc Maxmeister

1

Для Словаря мы можем использовать цикл для перебора index, keyи value:

dictionary = {'a': 0, 'z': 25}
for index, (key, value) in enumerate(dictionary.items()):
     ## Code here ##
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.