Цикл for в Python

Содержание
Введение
Пример
for in по разным типам объектов
for _ in
range()
Похожие статьи

Введение

В Python нет традиционного для многих языков программирования цикла for вместо него обычно используется цикл forin, который соответствует циклам вида for-each, например в PHP это foreach а в JavaScript это forEach

Пример

Рассмотрим файл for_loop.py

for i in range(1, 4): print(i)

python for_loop.py

1
2
3

Обратите внимание, что выведены были только i от 1 до 3. 4 Python не вывел.

Читать однострочные скрипты неудобно. Обычно каждое действие стараются записать на отдельной строке.

for i in range(1, 4): print(i)

python for_loop.py

1
2
3

Если написать код без хотя бы одного пробела перед print

for i in range(1,4): print(i)

то работать код не будет. Получится ошибка

File "/home/andrei/python/for_loop.py", line 2 print(i) ^ IndentationError: expected an indented block

IndentationError это подвид SyntaxError чтобы избежать её нужно поставить перед print(i) пробел

Применение к разным типам данных

Циклом for in можно пройтись не только по range, но по любому итерируемому объекту : по списку , строке , кортежу , словарю , множеству

numbers = [1, 2, 3, 5, 7] for n in numbers: print(n)

1 2 3 5 7

letters = "abcde" for l in letters: print(l)

a b c d e

pairs = {"x": 11, "y": 22, "z": 33} for p in pairs: print(p) for key, value in pairs.items(): print(key, value)

x y z x 11 y 22 z 33

uniques = {"a", "b", "b", "c", "c", "c"} for u in uniques: print(u)

b a c

coordinates = (4, 6, 8) for c in coordinates: print(c)

4 6 8

for _ in

Пример с _

retries = 3 retries_ = abs(int(retries)) for _ in range(retries_ + 1): print(_)

1
2
3
4

range()

for i in range(0, 4): print(i)

0 1 2 3

Такого же результата можно добиться задав range из кортежа

r = (1, 3) for i in range(r[0], r[1] + 1): print(i)

0 1 2 3

Если нужно использовать сложный range, например с разрывами - может помочь генератор списков

ranges = [(0, 2), (14, 17), (20, 20)] digits = [d for r in ranges for d in range(r[0], r[1] + 1)] print(digits)

[0, 1, 2, 14, 15, 16, 17, 20]

Это может пригодится, например, для генерации каких-то определённых символов функцией chr() (Python 3) или unichr() (Python 2)

try: get_char = unichr except NameError: get_char = chr ranges = [ (0x0021, 0x0021), (0x0023, 0x0026), (0x00A1, 0x00AC) ] symbols = [get_char(s) for r in ranges for s in range(r[0], r[1] + 1)] print(symbols)

['!', '#', '$', '%', '&', '¡', '¢', '£', '¤', '¥', '¦', '§', '¨', '©', 'ª', '«', '¬']

Сложение range

В Python 2 можно было явно складывать range и range потому что range() возвращал список

# Python 2 r = range(0, 3) + range(7, 9) print(r)

[0, 1, 2, 7, 8]

В Python 3 будет ошибка, потому что range() возвращает итерируемый объект класса range

Traceback (most recent call last): File "range_plus_range.py", line 1, in <module> r = range(0, 3) + range(7, 9) TypeError: unsupported operand type(s) for +: 'range' and 'range'

print(range(0, 3)) print(type(range(0, 3))) print(type(iter(range(0,3))))

range(0, 3) <class 'range'> <class 'range_iterator'>

r = iter(range(0, 3)) print(next(r)) print(next(r)) print(next(r))

0 1 2

Похожие статьи
Python
Циклы
continue
Collections

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: