Раздел 42 · Аналитика данных с нуля

Python: списки, строки покупок и пары значений

junior~25 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Бран · продюсер «Хроник Пограничья»

Финансисты прислали три суммы и карточку одной покупки. Не хочу заводить переменные amount1, amount2, amount3 для каждой новой строки. Собери данные так, чтобы я мог спросить «первая сумма» и «платформа покупки», не перепутав одно с другим.

В предыдущем уроке ты дал имена отдельным значениям. Теперь положишь связанные значения в один контейнер. Суммы удобно хранить по порядку, а поля покупки лучше подписать именами.

Данные в уроке учебные: три суммы 499, 199, 990 и одна карточка покупки.

Три суммы под одним именем

Запусти отдельную ячейку:

amounts = [499, 199, 990]
print(amounts)
print(amounts[0])
print(amounts[2])

Она напечатает:

[499, 199, 990]
499
990

Квадратные скобки справа от = создают список. Запятые отделяют элементы. Имя amounts теперь обозначает весь список, а не одну сумму.

Скобки после имени, как в amounts[0], уже не создают список: они выбирают элемент. Число внутри называется индексом. Первая позиция имеет индекс 0, вторая 1, третья 2.

Представь три ящика с наклейками 0, 1, 2. Номер ящика не равен количеству ящиков: их три, но ящика 3 нет.

ВыражениеЗначениеПочему
amounts[0]499Первый элемент
amounts[1]199Второй элемент
amounts[2]990Третий элемент

Обращение amounts[3] к этому списку остановит ячейку с IndexError. Python не вернёт ни ноль, ни None: ты запросил позицию, которой нет. Сначала проверь размер списка и нужный индекс, а не исправляй сумму догадкой.

Размер, сумма и сортировка

Для списка чисел уже есть готовые операции. Эта ячейка не зависит от предыдущих:

amounts = [499, 199, 990]
print(len(amounts))
print(sum(amounts))
print(sorted(amounts))
print(amounts)

Результат:

3
1688
[199, 499, 990]
[499, 199, 990]

len(amounts) считает элементы. sum(amounts) складывает числа. sorted(amounts) возвращает новый список по возрастанию. Исходный amounts остаётся в прежнем порядке, это видно по последней строке.

Как и у print, круглые скобки передают данные операции. В print(sum(amounts)) Python сначала вычисляет внутренний вызов sum(amounts), получает 1688, а затем передаёт число в print.

sum здесь напоминает SQL SUM, но работает с уже готовым списком в памяти. Значения в примере числовые: список строк "499" и "199" нельзя передать sum как суммы денег без преобразования.

Пустой список пишется []. Для него len([]) и sum([]) дают 0, а sorted([]) даёт []. Но первого элемента в нём нет, поэтому обращение по индексу 0 вызовет IndexError.

Практика · суммы покупок

В задаче лежит список из четырёх сумм. Напечатай первую сумму, число покупок, общий итог и отсортированный список. Циклы не нужны.

урок из курса

Урок из курса «Аналитика данных с нуля». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.