Необхідність зберігання набору чисел виникає в програмах із багатьох причин. Наприклад, в комп'ютерній грі можуть зберігатися координати кожного персонажа на екрані, таблиці рекордів і т.д.. У програмах візуалізації даних користувач майже завжди працює з наборами чисел: температурою, відстанню, чисельністю населення, широтою/довготою і іншими числовими даними. Списки ідеально підходять для зберігання наборів чисел, а Python надає спеціальні засоби для ефективної роботи з числовими списками. Досить один раз зрозуміти, як ефективно користуватися цими засобами, і ваш код буде добре працювати навіть в тому випадку, якщо список містить мільйони елементів.
Функція range().
Функція range() спрощує побудову числових послідовностей. Наприклад, з її допомогою можна легко вивести серію чисел:
for value in range (1,5):
print(value)
І хоча на перший погляд може здатися, що він повинен вивести числа від 1 до 5, насправді число 5 не виводиться:
1
2
3
4
У цьому прикладі range() виводить тільки числа від 1 до 4. Перед вами ще один прояв «зміщення на 1», який досить часто зустрічається в мовах програмування. При виконанні функції range(), Python починає відлік від першого переданого значення і припиняє його при досягненні другого. Так як на другому значенні відбувається зупинка, кінець інтервалу (5 в даному випадку) не зустрічається у кінцевому результаті. Щоб вивести числа від 1 до 5, використовуйте range (1,6):
for value in range (1,6):
print (value)
На цей раз результатом буде:
1
2
3
4
5
Якщо ваша програма при використанні range() виводить не той результат, на який ви розраховували, спробуйте збільшити кінцеве значення на 1.
Використання range() для створення числового списку.
Якщо ви хочете створити числовий список, перетворіть результати range() в список за допомогою функції list(). Якщо вкласти виклик range() в list(), то результат буде представляти собою список з числовими елементами. Набір чисел можна перетворити в список викликом list():
numbers = list(range (1,6))
print(numbers)
результат:
[1, 2, 3, 4, 5]
Функція range() також може генерувати числові послідовності, пропускаючи числа в заданому діапазоні. Наприклад, побудова списку парних чисел від 1 до 10 відбувається так:
even_numbers = list(range (2,11,2))
print(even_numbers)
У цьому прикладі функція range() починає зі значення 2, а потім збільшує його на 2. Приріст 2 послідовно застосовується до тих пір, поки не буде досягнуто або пройдено кінцеве значення 11, після чого виводиться результат:
[2, 4, 6, 8, 10]
За допомогою функції range() можна створити практично будь-який діапазон чисел. Наприклад, як би ви створили список квадратів всіх цілих чисел від 1 до 10? У мові Python операція піднесення до степеня позначається двома зірочками (**). Один з можливих варіантів виглядає так:
.1. squares = [ ]
.2. for value in range (1,11):
.3. square = value ** 2
.4. squares.append(square)
.5. print(squares)
Спочатку в точці .1. створюється порожній список з ім'ям squares. У точці .2. ви кажете Python перебрати всі значення від 1 до 10 за допомогою функції range(). У циклі поточне значення зводиться до другого степеня, а результат зберігається в змінній square в точці .3.. У точці .4. кожне нове значення square приєднується до списку squares. Нарешті, після завершення циклу список квадратів виводиться в точці .5.:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Щоб зробити код більш компактним, можна опустити тимчасову змінну square і приєднувати кожне нове значення прямо до списку:
squares = []
for value in range(1,11):
.1. squares.append(value ** 2)
print(squares)
Конструкція .1. виконує ту ж роботу, що і рядки .3. і .4. у прикладі вище. Кожне значення в циклі зводиться до другого степеня, а потім негайно приєднується до списку квадратів. При створенні більш складних списків можна використовувати будь-який з двох підходів. Іноді використання тимчасової змінної спрощує читання коду; в інших
випадках воно призводить лише до марного подовженню коду. Спочатку зосередьтеся на написанні чіткого і зрозумілого коду, який робить саме те, що потрібно, і тільки потім переходьте до аналізу коду і пошуку більш ефективних рішень.
Проста статистика з числовими списками.
Деякі функції Python призначені для роботи з числовими списками. Наприклад, ви можете легко дізнатися мінімум, максимум і суму числового списку:
>>> digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> min(digits)
0
>>> max(digits)
9
>>> sum(digits)
45
Генератори списків.
Описаний вище спосіб генерування списку squares складався з трьох або чотирьох рядків коду. Генератор списку (list comprehension) дозволяє згенерувати той же список всього в одному рядку. Генератор списку об'єднує цикл for і створення нових елементів в один рядок і автоматично приєднує до списку все нові елементи. Підручники не завжди розповідають про генератори списку початківцям програмістам, але я привожу цей матеріал, тому що ви з великою ймовірністю зустрінете цю конструкцію, як тільки почнете переглядати код інших розробників. У наступному прикладі список квадратів, знайомий вам із попередніх прикладів, будується з використанням генератора списку:
squares = [value ** 2 for value in range(1,11)]
print(squares)
Щоб використовувати цей синтаксис, почніть з змістовного імені списку, наприклад squares. Потім відкрийте квадратні дужки і визначте вираз для значень, які повинні бути збережені в новому списку. В даному прикладі це вираз value ** 2, який зводить значення до другого степеня. потім напишіть цикл for для генерування чисел, які повинні передаватися висловом, і закрийте квадратні дужки. Цикл for в даному прикладі - for value in range (1,11) - передає значення з 1 до 10 вислову value ** 2. Зверніть
увагу на відсутність двокрапки в кінці команди for. Результатом буде вже знайомий вам список квадратів:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Щоб успішно писати власні генератори списків, необхідний певний досвід. Проте, як тільки ви звикнете до створення звичайних списків, ви оціните можливості генераторів. Коли після чергового трьох-чотирьох рядкового блоку вам це набридне, подумайте про написання власних генераторів списків.
- Войдите или зарегистрируйтесь, чтобы оставлять комментарии