0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>3 дек 2025</li>
2
<ul><li>3 дек 2025</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Генерируем последовательности чисел и оптимизируем итерации.</p>
4
</ul><p>Генерируем последовательности чисел и оптимизируем итерации.</p>
5
<p>Иллюстрация: Оля Ежак для Skillbox Media</p>
5
<p>Иллюстрация: Оля Ежак для Skillbox Media</p>
6
<p>Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.</p>
6
<p>Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.</p>
7
<p>Когда требуется выполнить в коде одно и то же действие несколько раз - пройтись по элементам списка, вычислить значения переменной или вывести ряд чисел, - программисты используют цикл for вместе с функцией range().</p>
7
<p>Когда требуется выполнить в коде одно и то же действие несколько раз - пройтись по элементам списка, вычислить значения переменной или вывести ряд чисел, - программисты используют цикл for вместе с функцией range().</p>
8
<p>Эта функция создаёт диапазоны данных, задаёт шаг между элементами и не требует дополнительной памяти - это ускоряет выполнение кода. В статье мы разберём, как использовать range() в Python для разнообразных задач.</p>
8
<p>Эта функция создаёт диапазоны данных, задаёт шаг между элементами и не требует дополнительной памяти - это ускоряет выполнение кода. В статье мы разберём, как использовать range() в Python для разнообразных задач.</p>
9
<p><strong>Содержание</strong></p>
9
<p><strong>Содержание</strong></p>
10
<ul><li><a>Что такое функция range() в Python</a></li>
10
<ul><li><a>Что такое функция range() в Python</a></li>
11
<li><a>Как вызывать функцию range()</a></li>
11
<li><a>Как вызывать функцию range()</a></li>
12
<li><a>Как использовать range() с циклами</a></li>
12
<li><a>Как использовать range() с циклами</a></li>
13
<li><a>Как применять range() с функцией len()</a></li>
13
<li><a>Как применять range() с функцией len()</a></li>
14
<li><a>Как работать с float-значениями</a></li>
14
<li><a>Как работать с float-значениями</a></li>
15
<li><a>Как проверить принадлежность к диапазону</a></li>
15
<li><a>Как проверить принадлежность к диапазону</a></li>
16
<li><a>Как объединить диапазоны значений</a></li>
16
<li><a>Как объединить диапазоны значений</a></li>
17
<li><a>Как использовать range() в генераторах списков</a></li>
17
<li><a>Как использовать range() в генераторах списков</a></li>
18
</ul><p>range() - встроенная функция Python, которая создаёт последовательность целых чисел в заданном диапазоне. Она не хранит числа в памяти, а создаёт объект диапазона - специальный тип данных, содержащий только правила построения последовательности: начало, конец и шаг между элементами.</p>
18
</ul><p>range() - встроенная функция Python, которая создаёт последовательность целых чисел в заданном диапазоне. Она не хранит числа в памяти, а создаёт объект диапазона - специальный тип данных, содержащий только правила построения последовательности: начало, конец и шаг между элементами.</p>
19
<p>При обращении к объекту Python вычисляет значения на лету - это называется<a>ленивым вычислением</a>. Благодаря этому range() работает быстро и экономит память, даже если диапазон содержит миллионы элементов.</p>
19
<p>При обращении к объекту Python вычисляет значения на лету - это называется<a>ленивым вычислением</a>. Благодаря этому range() работает быстро и экономит память, даже если диапазон содержит миллионы элементов.</p>
20
<p>Например, range(1000000) создаёт объект размером всего несколько байт, хотя представляет миллион чисел. Если бы мы создали список из миллиона элементов - list(range(1000000)) - он занял бы около 8 МБ памяти.</p>
20
<p>Например, range(1000000) создаёт объект размером всего несколько байт, хотя представляет миллион чисел. Если бы мы создали список из миллиона элементов - list(range(1000000)) - он занял бы около 8 МБ памяти.</p>
21
<p>Проверим это в работе и создадим последовательность из пяти чисел:</p>
21
<p>Проверим это в работе и создадим последовательность из пяти чисел:</p>
22
print(range(5))<p>В ответ получим range(0, 5). Чтобы увидеть конкретные значения, нужно преобразовать диапазон в список:</p>
22
print(range(5))<p>В ответ получим range(0, 5). Чтобы увидеть конкретные значения, нужно преобразовать диапазон в список:</p>
23
print(list(range(5)))<p>Теперь видим всю последовательность: [0, 1, 2, 3, 4].</p>
23
print(list(range(5)))<p>Теперь видим всю последовательность: [0, 1, 2, 3, 4].</p>
24
<p><strong>Обратите внимание</strong>, что первым элементом последовательности будет 0. Если требуется явно задать стартовое число, например 1, то это необходимо указать при вызове функции. Это рассмотрим дальше.</p>
24
<p><strong>Обратите внимание</strong>, что первым элементом последовательности будет 0. Если требуется явно задать стартовое число, например 1, то это необходимо указать при вызове функции. Это рассмотрим дальше.</p>
25
<p>Функцию range() можно вызвать тремя способами - в зависимости от того, какие параметры вы передаёте:</p>
25
<p>Функцию range() можно вызвать тремя способами - в зависимости от того, какие параметры вы передаёте:</p>
26
range(stop) range(start, stop) range(start, stop, step)<p>Рассмотрим параметры функции:</p>
26
range(stop) range(start, stop) range(start, stop, step)<p>Рассмотрим параметры функции:</p>
27
<ul><li>start - число, с которого начинается последовательность (по умолчанию 0);</li>
27
<ul><li>start - число, с которого начинается последовательность (по умолчанию 0);</li>
28
<li>stop - число, до которого считать (не включая его);</li>
28
<li>stop - число, до которого считать (не включая его);</li>
29
<li>step - шаг между элементами (по умолчанию 1).</li>
29
<li>step - шаг между элементами (по умолчанию 1).</li>
30
</ul><p>А вот несколько примеров для закрепления:</p>
30
</ul><p>А вот несколько примеров для закрепления:</p>
31
print(list(range(5))) # [0, 1, 2, 3, 4] print(list(range(2, 6))) # [2, 3, 4, 5] print(list(range(1, 10, 2))) # [1, 3, 5, 7, 9]<p>В этих примерах мы используем три встроенные функции: range() создаёт объект диапазона, list() преобразует его в список, а print() выводит результат. Без list() вы увидите только range(0, 5), а без print() код ничего не выведет.</p>
31
print(list(range(5))) # [0, 1, 2, 3, 4] print(list(range(2, 6))) # [2, 3, 4, 5] print(list(range(1, 10, 2))) # [1, 3, 5, 7, 9]<p>В этих примерах мы используем три встроенные функции: range() создаёт объект диапазона, list() преобразует его в список, а print() выводит результат. Без list() вы увидите только range(0, 5), а без print() код ничего не выведет.</p>
32
<p>Цикл for в Python - это конструкция, с помощью которой можно выполнять один и тот же блок кода для каждого элемента последовательности. Он будет перебирать их по очереди и повторять действия, пока они не закончатся.</p>
32
<p>Цикл for в Python - это конструкция, с помощью которой можно выполнять один и тот же блок кода для каждого элемента последовательности. Он будет перебирать их по очереди и повторять действия, пока они не закончатся.</p>
33
<p>Функция range() в Python часто используется с циклом for: она создаёт последовательность чисел для перебора. Это основной инструмент для повторяющихся действий - от простых подсчётов до сложных алгоритмов.</p>
33
<p>Функция range() в Python часто используется с циклом for: она создаёт последовательность чисел для перебора. Это основной инструмент для повторяющихся действий - от простых подсчётов до сложных алгоритмов.</p>
34
<p>Напишем такой цикл:</p>
34
<p>Напишем такой цикл:</p>
35
for i in range(5): print(i) # 0, 1, 2, 3, 4<p>Этот код последовательно подставит в переменную i числа от 0 до 4 и выведет их на экран. Сами числа генерируются с помощью range(5), а цикл for использует каждое из них по очереди.</p>
35
for i in range(5): print(i) # 0, 1, 2, 3, 4<p>Этот код последовательно подставит в переменную i числа от 0 до 4 и выведет их на экран. Сами числа генерируются с помощью range(5), а цикл for использует каждое из них по очереди.</p>
36
<p>Можно задать не только количество повторений, но и диапазон значений - с какого числа начать и на каком завершить последовательность:</p>
36
<p>Можно задать не только количество повторений, но и диапазон значений - с какого числа начать и на каком завершить последовательность:</p>
37
for i in range(2, 7): print(i) # 2, 3, 4, 5, 6<p>С помощью range() можно обратиться к элементам списка по индексу:</p>
37
for i in range(2, 7): print(i) # 2, 3, 4, 5, 6<p>С помощью range() можно обратиться к элементам списка по индексу:</p>
38
fruits = ['Xiaomi', 'Samsung', 'Tecno'] for i in range(len(fruits)): print(f'Индекс {i}: {fruits[i]}')<p>Получим следующий результат:</p>
38
fruits = ['Xiaomi', 'Samsung', 'Tecno'] for i in range(len(fruits)): print(f'Индекс {i}: {fruits[i]}')<p>Получим следующий результат:</p>
39
Индекс 0: Xiaomi Индекс 1: Samsung Индекс 2: Tecno<p>У функции range() есть третий параметр - шаг. Он определяет, с каким интервалом изменяется каждое следующее значение в последовательности. Если шаг не задан, Python считает, что он равен 1. Вот пример:</p>
39
Индекс 0: Xiaomi Индекс 1: Samsung Индекс 2: Tecno<p>У функции range() есть третий параметр - шаг. Он определяет, с каким интервалом изменяется каждое следующее значение в последовательности. Если шаг не задан, Python считает, что он равен 1. Вот пример:</p>
40
for i in range(0, 10, 2): print(i)<p>Здесь range(0, 10, 2) создаёт числа от 0 до 9 с шагом 2. Результат:</p>
40
for i in range(0, 10, 2): print(i)<p>Здесь range(0, 10, 2) создаёт числа от 0 до 9 с шагом 2. Результат:</p>
41
0 2 4 6 8<p>Можно указать отрицательный шаг, который позволяет двигаться по последовательности в обратном порядке - от большего к меньшему:</p>
41
0 2 4 6 8<p>Можно указать отрицательный шаг, который позволяет двигаться по последовательности в обратном порядке - от большего к меньшему:</p>
42
for i in range(10, 5, -1): print(i)<p>Функция уменьшает значение на 1 на каждом шаге:</p>
42
for i in range(10, 5, -1): print(i)<p>Функция уменьшает значение на 1 на каждом шаге:</p>
43
10 9 8 7 6<p>При отрицательном шаге начальное значение start должно быть больше конечного stop - иначе диапазон будет пустым:</p>
43
10 9 8 7 6<p>При отрицательном шаге начальное значение start должно быть больше конечного stop - иначе диапазон будет пустым:</p>
44
for i in range(0, 10, -1): print(i) # Ничего не выведет<p>Вложенные циклы - это циклы внутри других циклов. Они позволяют выполнять повторяющиеся действия на нескольких уровнях. Например, внешний цикл может перебирать строки, а внутренний - столбцы в таблице. Это полезно для работы с двумерными данными, создания координатных сеток, перебора всех возможных комбинаций элементов из разных списков.</p>
44
for i in range(0, 10, -1): print(i) # Ничего не выведет<p>Вложенные циклы - это циклы внутри других циклов. Они позволяют выполнять повторяющиеся действия на нескольких уровнях. Например, внешний цикл может перебирать строки, а внутренний - столбцы в таблице. Это полезно для работы с двумерными данными, создания координатных сеток, перебора всех возможных комбинаций элементов из разных списков.</p>
45
<p>Во вложенных циклах range() управляет количеством повторений на каждом уровне. Рассмотрим пример:</p>
45
<p>Во вложенных циклах range() управляет количеством повторений на каждом уровне. Рассмотрим пример:</p>
46
for i in range(3): # Внешний цикл: перебираем три строки for j in range(2): # Внутренний цикл: перебираем два столбца print(f'Строка {i}, Столбец {j}') # Выводим координаты каждой ячейки<p>Вот что получится:</p>
46
for i in range(3): # Внешний цикл: перебираем три строки for j in range(2): # Внутренний цикл: перебираем два столбца print(f'Строка {i}, Столбец {j}') # Выводим координаты каждой ячейки<p>Вот что получится:</p>
47
Строка 0, Столбец 0 Строка 0, Столбец 1 Строка 1, Столбец 0 Строка 1, Столбец 1 Строка 2, Столбец 0 Строка 2, Столбец 1<p>Внешний цикл проходит по строкам, внутренний - по столбцам. Так можно работать с двумерными массивами или рисовать фигуры в консоли.</p>
47
Строка 0, Столбец 0 Строка 0, Столбец 1 Строка 1, Столбец 0 Строка 1, Столбец 1 Строка 2, Столбец 0 Строка 2, Столбец 1<p>Внешний цикл проходит по строкам, внутренний - по столбцам. Так можно работать с двумерными массивами или рисовать фигуры в консоли.</p>
48
<p>Для закрепления напишем короткую версию таблицы умножения до 5:</p>
48
<p>Для закрепления напишем короткую версию таблицы умножения до 5:</p>
49
for i in range(1, 6): for j in range(1, 6): print(i * j, end='\t') print()<p>Внешний цикл управляет строками, а внутренний - столбцами. При выводе мы перемножаем числа из обоих циклов. Чтобы оформить результат в виде таблицы, используем параметр end='\t' - он добавляет табуляцию между элементами. В результате мы получим таблицу умножения от 1 до 5:</p>
49
for i in range(1, 6): for j in range(1, 6): print(i * j, end='\t') print()<p>Внешний цикл управляет строками, а внутренний - столбцами. При выводе мы перемножаем числа из обоих циклов. Чтобы оформить результат в виде таблицы, используем параметр end='\t' - он добавляет табуляцию между элементами. В результате мы получим таблицу умножения от 1 до 5:</p>
50
1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25<p>С помощью вложенных циклов можно рисовать геометрические фигуры. Например, построим прямоугольник из звёздочек:</p>
50
1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25<p>С помощью вложенных циклов можно рисовать геометрические фигуры. Например, построим прямоугольник из звёздочек:</p>
51
for i in range(3): for j in range(5): print('*', end='') print()<p>Внутренний цикл печатает одну строку из звёздочек, а внешний цикл определяет количество таких строк. Параметр end='' оставляем пустым, чтобы при выводе между элементами не было пробелов или других символов:</p>
51
for i in range(3): for j in range(5): print('*', end='') print()<p>Внутренний цикл печатает одну строку из звёздочек, а внешний цикл определяет количество таких строк. Параметр end='' оставляем пустым, чтобы при выводе между элементами не было пробелов или других символов:</p>
52
***** ***** *****<p>Теперь решим задачу посложнее. Напишем код, который создаст приветственные сообщения для каждого человека в двух вариантах:</p>
52
***** ***** *****<p>Теперь решим задачу посложнее. Напишем код, который создаст приветственные сообщения для каждого человека в двух вариантах:</p>
53
names = ['Аня', 'Борис', 'Вика'] greetings = ['Привет', 'Здравствуйте'] for name in names: for greet in greetings: print(f'{greet}, {name}!')<p>Программа выведет все комбинации приветствий и имён:</p>
53
names = ['Аня', 'Борис', 'Вика'] greetings = ['Привет', 'Здравствуйте'] for name in names: for greet in greetings: print(f'{greet}, {name}!')<p>Программа выведет все комбинации приветствий и имён:</p>
54
Привет, Аня! Здравствуйте, Аня! Привет, Борис! Здравствуйте, Борис! Привет, Вика! Здравствуйте, Вика!<p>Функция len() в Python возвращает длину объекта - количество элементов в коллекциях:<a>списке</a>,<a>строке</a>,<a>кортеже</a>,<a>словаре</a>и <a>множестве</a>. Функция range(), в свою очередь, создаёт последовательность чисел. Вместе с len() она часто используется для обхода элементов по их индексам - это может пригодиться, когда необходимо не только получить значение элемента, но и узнать его позицию в коллекции или одновременно работать с несколькими списками.</p>
54
Привет, Аня! Здравствуйте, Аня! Привет, Борис! Здравствуйте, Борис! Привет, Вика! Здравствуйте, Вика!<p>Функция len() в Python возвращает длину объекта - количество элементов в коллекциях:<a>списке</a>,<a>строке</a>,<a>кортеже</a>,<a>словаре</a>и <a>множестве</a>. Функция range(), в свою очередь, создаёт последовательность чисел. Вместе с len() она часто используется для обхода элементов по их индексам - это может пригодиться, когда необходимо не только получить значение элемента, но и узнать его позицию в коллекции или одновременно работать с несколькими списками.</p>
55
<p>Представим, нам нужно вывести нумерованный список студентов с указанием их баллов. Для этого напишем код и используем в нём range() и len():</p>
55
<p>Представим, нам нужно вывести нумерованный список студентов с указанием их баллов. Для этого напишем код и используем в нём range() и len():</p>
56
grades = [95, 82, 74, 100, 89] # Список баллов студентов for i in range(len(grades)): # Получаем индексы от 0 до 4 print('Студент №', str(i + 1) + ':', grades[i], 'баллов') # Выводим номер студента и его баллы<p>Выводим результат:</p>
56
grades = [95, 82, 74, 100, 89] # Список баллов студентов for i in range(len(grades)): # Получаем индексы от 0 до 4 print('Студент №', str(i + 1) + ':', grades[i], 'баллов') # Выводим номер студента и его баллы<p>Выводим результат:</p>
57
Студент №1: 95 баллов Студент №2: 82 баллов Студент №3: 74 баллов Студент №4: 100 баллов Студент №5: 89 баллов<p>Таким же способом можно изменять элементы списка в цикле:</p>
57
Студент №1: 95 баллов Студент №2: 82 баллов Студент №3: 74 баллов Студент №4: 100 баллов Студент №5: 89 баллов<p>Таким же способом можно изменять элементы списка в цикле:</p>
58
numbers = [10, 20, 30] for i in range(len(numbers)): numbers[i] = numbers[i] * 2 print(numbers) # [20, 40, 60]<p>С помощью range(len(numbers)) мы перебираем индексы от 0 до длины списка (в данном случае от 0 до 2). На каждой итерации обращаемся к элементу по его индексу i и присваиваем ему новое значение - исходное, умноженное на 2.</p>
58
numbers = [10, 20, 30] for i in range(len(numbers)): numbers[i] = numbers[i] * 2 print(numbers) # [20, 40, 60]<p>С помощью range(len(numbers)) мы перебираем индексы от 0 до длины списка (в данном случае от 0 до 2). На каждой итерации обращаемся к элементу по его индексу i и присваиваем ему новое значение - исходное, умноженное на 2.</p>
59
<p>В цикле for можно работать с двумя списками одновременно:</p>
59
<p>В цикле for можно работать с двумя списками одновременно:</p>
60
names = ['Анна', 'Борис', 'Вика'] scores = [85, 90, 78] for i in range(len(names)): print(names[i], '-', scores[i])<p>В примере выше мы используем общий индекс i для одновременного обращения к элементам обоих списков по их позициям - так мы можем связать имя каждого студента с его баллом. Посмотрите на результат:</p>
60
names = ['Анна', 'Борис', 'Вика'] scores = [85, 90, 78] for i in range(len(names)): print(names[i], '-', scores[i])<p>В примере выше мы используем общий индекс i для одновременного обращения к элементам обоих списков по их позициям - так мы можем связать имя каждого студента с его баллом. Посмотрите на результат:</p>
61
Анна - 85 Борис - 90 Вика - 78<p>Функция range() в Python работает только с целыми числами. Если вы попытаетесь передать ей дробное значение, то получите ошибку:</p>
61
Анна - 85 Борис - 90 Вика - 78<p>Функция range() в Python работает только с целыми числами. Если вы попытаетесь передать ей дробное значение, то получите ошибку:</p>
62
range(0.5, 5) # TypeError: 'float' object cannot be interpreted as an integer<p>Для работы с дробными значениями используйте библиотеку NumPy или цикл while. NumPy подходит для работы с массивами и сложных математических вычислений. Для простых задач, когда не хочется добавлять зависимости в проект, используйте while - он работает с дробными числами из коробки.</p>
62
range(0.5, 5) # TypeError: 'float' object cannot be interpreted as an integer<p>Для работы с дробными значениями используйте библиотеку NumPy или цикл while. NumPy подходит для работы с массивами и сложных математических вычислений. Для простых задач, когда не хочется добавлять зависимости в проект, используйте while - он работает с дробными числами из коробки.</p>
63
<p>Рассмотрим пример с NumPy:</p>
63
<p>Рассмотрим пример с NumPy:</p>
64
import numpy as np for i in np.arange(0, 1, 0.2): print(i)<p>Результат:</p>
64
import numpy as np for i in np.arange(0, 1, 0.2): print(i)<p>Результат:</p>
65
0.0 0.2 0.4 0.6000000000000001 0.8<p>Здесь np.arange(start, stop, step) создаёт массив чисел с шагом 0.2, и цикл for перебирает их по порядку. Однако при работе с дробными числами может возникнуть проблема с точностью вычислений. Например, вместо 0.6 вы получите 0.6000000000000001 - это связано с особенностями представления чисел с плавающей точкой в памяти компьютера. Чтобы этого избежать, достаточно добавить функцию round() для округления после запятой:</p>
65
0.0 0.2 0.4 0.6000000000000001 0.8<p>Здесь np.arange(start, stop, step) создаёт массив чисел с шагом 0.2, и цикл for перебирает их по порядку. Однако при работе с дробными числами может возникнуть проблема с точностью вычислений. Например, вместо 0.6 вы получите 0.6000000000000001 - это связано с особенностями представления чисел с плавающей точкой в памяти компьютера. Чтобы этого избежать, достаточно добавить функцию round() для округления после запятой:</p>
66
import numpy as np for i in np.arange(0, 1, 0.2): print(round(i, 1)) # Округляем до одного знака после запятой<p>Теперь результат будет чистым и понятным:</p>
66
import numpy as np for i in np.arange(0, 1, 0.2): print(round(i, 1)) # Округляем до одного знака после запятой<p>Теперь результат будет чистым и понятным:</p>
67
import numpy as np for i in np.arange(0, 1, 0.2): print(round(i, 1)) # Округляем до одного знака после запятой<p>Попробуем цикл while и напишем код для вывода чисел от 0 до 0,8 с шагом 0,2:</p>
67
import numpy as np for i in np.arange(0, 1, 0.2): print(round(i, 1)) # Округляем до одного знака после запятой<p>Попробуем цикл while и напишем код для вывода чисел от 0 до 0,8 с шагом 0,2:</p>
68
i = 0.0 while i < 1.0: print(round(i, 1)) i += 0.2<p>Результат совпадёт с тем, что даёт NumPy:</p>
68
i = 0.0 while i < 1.0: print(round(i, 1)) i += 0.2<p>Результат совпадёт с тем, что даёт NumPy:</p>
69
0.0 0.2 0.4 0.6 0.8<p>Здесь мы также добавили round(), чтобы избежать накопления ошибок округления, возникающих при многократном сложении дробных чисел.</p>
69
0.0 0.2 0.4 0.6 0.8<p>Здесь мы также добавили round(), чтобы избежать накопления ошибок округления, возникающих при многократном сложении дробных чисел.</p>
70
<p>Функция range() поддерживает оператор in - с его помощью можно выяснить, входит ли определённое значение в созданную последовательность. Например:</p>
70
<p>Функция range() поддерживает оператор in - с его помощью можно выяснить, входит ли определённое значение в созданную последовательность. Например:</p>
71
numbers = range(0, 10) print(5 in numbers) # True print(15 in numbers) # False<p>Здесь range(0, 10) создаёт числа от 0 до 9. Когда мы проверяем, входит ли число 5 в этот диапазон, Python возвращает True - оно действительно там есть. А число 15 выходит за пределы диапазона, поэтому результат False.</p>
71
numbers = range(0, 10) print(5 in numbers) # True print(15 in numbers) # False<p>Здесь range(0, 10) создаёт числа от 0 до 9. Когда мы проверяем, входит ли число 5 в этот диапазон, Python возвращает True - оно действительно там есть. А число 15 выходит за пределы диапазона, поэтому результат False.</p>
72
<p>Оператор in можно использовать не только для проверки принадлежности, но и для фильтрации данных. Допустим, есть список чисел, и мы хотим выбрать только те значения, которые кратны 10 и входят в диапазон от 10 до 50:</p>
72
<p>Оператор in можно использовать не только для проверки принадлежности, но и для фильтрации данных. Допустим, есть список чисел, и мы хотим выбрать только те значения, которые кратны 10 и входят в диапазон от 10 до 50:</p>
73
values = [5, 10, 20, 25, 30, 45, 50, 60] allowed = range(10, 51, 10) for v in values: if v in allowed: print(v)<p>В данном примере мы создаём список значений values и диапазон allowed с числами, кратными 10. Цикл проходит по каждому значению из списка values - если оно входит в диапазон allowed, программа выводит его на экран. Оператор in позволяет быстро проверить принадлежность числа к range() без перебора всех элементов диапазона вручную. Числа из указанного диапазона:</p>
73
values = [5, 10, 20, 25, 30, 45, 50, 60] allowed = range(10, 51, 10) for v in values: if v in allowed: print(v)<p>В данном примере мы создаём список значений values и диапазон allowed с числами, кратными 10. Цикл проходит по каждому значению из списка values - если оно входит в диапазон allowed, программа выводит его на экран. Оператор in позволяет быстро проверить принадлежность числа к range() без перебора всех элементов диапазона вручную. Числа из указанного диапазона:</p>
74
10 20 30 50<p>Оператор in работает и при создании диапазона с отрицательным шагом - Python правильно определяет принадлежность числа к убывающей последовательности, проверяя не только границы, но и соответствие шагу:</p>
74
10 20 30 50<p>Оператор in работает и при создании диапазона с отрицательным шагом - Python правильно определяет принадлежность числа к убывающей последовательности, проверяя не только границы, но и соответствие шагу:</p>
75
r = range(10, 0, -2) print(6 in r) # True print(5 in r) # False<p>Диапазон r состоит из таких чисел: 10, 8, 6, 4, 2. Число 6 входит в эту последовательность, поэтому проверка возвращает True. Число 5 тоже находится между 10 и 0, но не соответствует шагу -2 - поэтому результат False.</p>
75
r = range(10, 0, -2) print(6 in r) # True print(5 in r) # False<p>Диапазон r состоит из таких чисел: 10, 8, 6, 4, 2. Число 6 входит в эту последовательность, поэтому проверка возвращает True. Число 5 тоже находится между 10 и 0, но не соответствует шагу -2 - поэтому результат False.</p>
76
<p>Иногда нужно объединить результаты двух функций range(). Напрямую сложить два диапазона с помощью оператора + не получится - Python выдаст ошибку TypeError, поскольку объекты range не поддерживают операцию сложения. Однако объединить диапазоны всё же можно: для этого есть несколько способов, и далее мы рассмотрим два наиболее распространённых.</p>
76
<p>Иногда нужно объединить результаты двух функций range(). Напрямую сложить два диапазона с помощью оператора + не получится - Python выдаст ошибку TypeError, поскольку объекты range не поддерживают операцию сложения. Однако объединить диапазоны всё же можно: для этого есть несколько способов, и далее мы рассмотрим два наиболее распространённых.</p>
77
<p>Самый простой вариант - превратить оба диапазона в списки и сложить их:</p>
77
<p>Самый простой вариант - превратить оба диапазона в списки и сложить их:</p>
78
r1 = range(0, 5) r2 = range(5, 10) combined = list(r1) + list(r2) print(combined) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]<p>Более эффективный способ - использовать модуль<a>itertools</a>. Функция itertools.chain() объединяет несколько последовательностей в один итерируемый объект, который можно обойти в цикле. Преимущество этого подхода в том, что он не создаёт промежуточные списки в памяти, элементы берутся по одному из каждого диапазона по мере необходимости, что значительно экономит ресурсы при работе с большими последовательностями:</p>
78
r1 = range(0, 5) r2 = range(5, 10) combined = list(r1) + list(r2) print(combined) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]<p>Более эффективный способ - использовать модуль<a>itertools</a>. Функция itertools.chain() объединяет несколько последовательностей в один итерируемый объект, который можно обойти в цикле. Преимущество этого подхода в том, что он не создаёт промежуточные списки в памяти, элементы берутся по одному из каждого диапазона по мере необходимости, что значительно экономит ресурсы при работе с большими последовательностями:</p>
79
from itertools import chain r1 = range(0, 5) r2 = range(5, 10) for num in chain(r1, r2): print(num, end=' ') # 0 1 2 3 4 5 6 7 8 9<p>Генератор списков - это конструкция в Python, которая позволяет создать новый список одной строкой без использования цикла for и метода append().</p>
79
from itertools import chain r1 = range(0, 5) r2 = range(5, 10) for num in chain(r1, r2): print(num, end=' ') # 0 1 2 3 4 5 6 7 8 9<p>Генератор списков - это конструкция в Python, которая позволяет создать новый список одной строкой без использования цикла for и метода append().</p>
80
<p>Обычный цикл для создания списка выглядит так:</p>
80
<p>Обычный цикл для создания списка выглядит так:</p>
81
numbers = [] for i in range(5): numbers.append(i ** 2) print(numbers) # [0, 1, 4, 9, 16]<p>С помощью генератора списка тот же результат можно получить в одну строку:</p>
81
numbers = [] for i in range(5): numbers.append(i ** 2) print(numbers) # [0, 1, 4, 9, 16]<p>С помощью генератора списка тот же результат можно получить в одну строку:</p>
82
numbers = [i ** 2 for i in range(5)] print(numbers) # [0, 1, 4, 9, 16]<p>Синтаксис: [выражение for элемент in итерируемый_объект]. В примере:</p>
82
numbers = [i ** 2 for i in range(5)] print(numbers) # [0, 1, 4, 9, 16]<p>Синтаксис: [выражение for элемент in итерируемый_объект]. В примере:</p>
83
<ul><li>выражение - i ** 2, где i - это элемент последовательности, которую мы создаём с помощью range();</li>
83
<ul><li>выражение - i ** 2, где i - это элемент последовательности, которую мы создаём с помощью range();</li>
84
<li>элемент - i, переменная, которая принимает значения из последовательности;</li>
84
<li>элемент - i, переменная, которая принимает значения из последовательности;</li>
85
<li>итерируемый объект - последовательность, созданная функцией range(5).</li>
85
<li>итерируемый объект - последовательность, созданная функцией range(5).</li>
86
</ul><p>Вы можете настроить функцию range() с любым шагом. Так, в примере ниже range(0, 10, 2) создаёт последовательность чётных чисел от 0 до 9 с шагом 2, а генератор списка затем собирает все отобранные значения в новый список:</p>
86
</ul><p>Вы можете настроить функцию range() с любым шагом. Так, в примере ниже range(0, 10, 2) создаёт последовательность чётных чисел от 0 до 9 с шагом 2, а генератор списка затем собирает все отобранные значения в новый список:</p>
87
evens = [i for i in range(0, 10, 2)] print(evens) # [0, 2, 4, 6, 8]<p>Генераторы списков поддерживают условные выражения для фильтрации элементов. Например, чтобы отобрать нечётные числа, добавим условие if i % 2! = 0 - оно проверяет, что остаток от деления на 2 не равен нулю:</p>
87
evens = [i for i in range(0, 10, 2)] print(evens) # [0, 2, 4, 6, 8]<p>Генераторы списков поддерживают условные выражения для фильтрации элементов. Например, чтобы отобрать нечётные числа, добавим условие if i % 2! = 0 - оно проверяет, что остаток от деления на 2 не равен нулю:</p>
88
odds = [i for i in range(10) if i % 2 != 0] print(odds) # [1, 3, 5, 7, 9]<p>Python для всех</p>
88
odds = [i for i in range(10) if i % 2 != 0] print(odds) # [1, 3, 5, 7, 9]<p>Python для всех</p>
89
<p>Вы освоите Python на практике и создадите проекты для портфолио - телеграм-бот, веб-парсер и сайт с нуля. А ещё получите готовый план выхода на удалёнку и фриланс. Спикер - руководитель отдела разработки в "Сбере".</p>
89
<p>Вы освоите Python на практике и создадите проекты для портфолио - телеграм-бот, веб-парсер и сайт с нуля. А ещё получите готовый план выхода на удалёнку и фриланс. Спикер - руководитель отдела разработки в "Сбере".</p>
90
<p><a>Пройти бесплатно</a></p>
90
<p><a>Пройти бесплатно</a></p>
91
<a><b>Бесплатный курс по разработке на Python ➞</b>Пройдите бесплатный курс по Python и создайте с нуля телеграм-бот, веб-парсер и сайт. Спикер - руководитель отдела разработки в "Сбере". Пройти курс</a>
91
<a><b>Бесплатный курс по разработке на Python ➞</b>Пройдите бесплатный курс по Python и создайте с нуля телеграм-бот, веб-парсер и сайт. Спикер - руководитель отдела разработки в "Сбере". Пройти курс</a>