Цикл for в Python

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

Введение

В Python нет традиционного для многих языков программирования цикла for вместо него обычно используется цикл for … in, который соответствует циклам вида 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

Banner image

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

Article author: Andrei Olegovich

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

Search this site

Subscribe to Telegram channel @aofeed to follow new articles and updates to old ones

Go to channel

@aofeed

Ask a question in the Telegram group

@aofeedchat

Contacts and cooperation:
I recommend our hosting beget.ru
Write to info@urn.su if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: