Сообщить об ошибке.

Типы данных Python, поддерживающие итераторы

В Python, фактически любой тип последовательности, например список list, кортеж tuple, или частный случай кортежа - строка str, автоматически поддерживает создание итератора.

>>> line = 'joy'
>>> for item in line:
...   print(item)
# j
# o
# y

>>> a, b, c = line
>>> print(a, b, c)
# j o y

Применение функции iter() к словарю dict, возвращает итератор, который будет перебирать ключи словаря:

>>> m = {'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4, 'May': 5, 'Jun': 6,
...      'Jul': 7, 'Aug': 8, 'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12}
>>> for key in m:
...     print(key, m[key])
# Jan 1
# Feb 2
# Mar 3
# Apr 4
# May 5
# Jun 6
# Jul 7
# Aug 8
# Sep 9
# Oct 10
# Nov 11
# Dec 12

Обратите внимание, что начиная с Python 3.7 порядок итерации словаря гарантированно совпадает с порядком вставки. В более ранних версиях поведение было не определено и могло различаться в зависимости от реализации.

Вызов iter() со словарем, в качестве аргумента, всегда возвращает поток ключей, но у словарей есть методы, которые возвращают другие итераторы. Если необходимо перебрать значения словаря value или пары (key, value), то можно явно вызвать методы dict.values() или dict.items(), чтобы получить соответствующий итератор.

Конструктор dict() может принимать итератор, который возвращает конечный поток кортежей (key, value):

>>> L = [('Italy', 'Rome'), ('France', 'Paris'), ('US', 'Washington DC')]
>>> dict(iter(L))
{'Italy': 'Rome', 'France': 'Paris', 'US': 'Washington DC'}

Файлы (файловый объект) также поддерживают итерацию путём вызова метода file.readline() до тех пор, пока в файле не кончатся строки. Это означает, что из открытого файла можно читать по одной строке за один раз, что экономит память:

with open('dir/to/file', 'r') as file:
    for line in file:
        # делаем что-то c каждой строкой
    ...

Множества set могут наполнять своё содержимое из итерируемого объекта и позволяют выполнять итерацию по элементам множества:

>>> s = {3, 7, 11, 13}
>>> for i in s:
...     print(i)
# 11
# 3
# 13
# 7