Цикл 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