Цикл for в Python

Содержание
Введение
for _ in
range()
Похожие статьи

Рассмотрим файл 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,3): 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

Поэтому нужно поставить перед print пробел

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

Похожие статьи
Built-in Collections
Строки
f-string
format string
Списки []
list comprehension: Абстракция списка
Словари {:}
dict comprehension: Абстракция словаря
Множества {}
set comprehension: Абстракция множества
Кортежи ()
Протоколы
Итерация
Python
if, elif, else
Циклы