Еквівалент передбачення Python


191

Я занурююся в Python, і у мене є питання щодо ітерації передбачення. Я новачок у Python і маю певний досвід роботи в C #. Мені цікаво, чи є в Python якась еквівалентна функція для ітерації всіх елементів моєї колекції, наприклад

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

або щось подібне.


Відповіді:


294

Звичайно. А для петлі.

for f in pets:
    print f

Що робити, якщо я також повинен знати індекс / ключ?
підсвічник

25
Тоді ви б використовували перерахування. for k,v in enumerate(pets): п.
Ханну

30

Подобається це:

for pet in pets :
  print(pet)

Насправді, Python має лишеfor петлі стилю foreach .


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

Хоча відповіді вище є дійсними, якщо ви повторюєте дік {ключ: значення}, це такий підхід, який я люблю використовувати:

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()
Марк Максмайстер

1

Для dict ми можемо використовувати цикл for, щоб перебрати через 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.