Как работать со списками в Python
Как работать со списками в Python
Научимся создавать, изменять содержимое списков и сортировать их.
Список (list) в Python — это упорядоченная коллекция элементов, которая позволяет хранить несколько значений в одной переменной. Списки помогают удобно работать с группами данных, выполняя различные операции — добавление, удаление или изменение элементов.
В веб-разработке списки часто применяются для хранения данных, полученных от пользователя или из базы данных. Каждый элемент — это ссылка на данные об этом элементе в памяти компьютера. Поэтому элементы в списках Python могут быть любого размера и типа — число, строка или ещё один список.
Например, покупатель интернет-магазина добавляет товары в корзину. Они могут быть представлены в виде списка. Каждый элемент — товар с его названием, ценой и количеством. С помощью списков можно легко добавлять, удалять и изменять товары в корзине.
Пример списка товаров:
shopping_cart = ['orange', 'peach', 'lemon']
Python поймёт, что работает со списком, если включить его элементы в квадратные скобки [] и указать их через запятую.
Вот несколько примеров создания разных списков Python:
# Пустой список
empty_list = []
# Список с числами
numbers = [1, 2, 3, 4, 5]
# Список со строками
fruits = ["orange", "peach", "lemon"]
# Список с различными типами данных
mixed = [2, "orange", 4.23, True]
Представим список покупок на рынке. Какие-то продукты уже купили, а некоторые передумали брать, вычеркнули их или заменили другими. В списках Python элементы тоже можно изменять. Разберёмся, как это сделать.
Чтобы получить элемент из списка, используют индекс. Python воспринимает его как отступ.
Примеры:
fruits = ["orange", "peach", "lemon"]
# Первый элемент
print(fruits[0]) # Вывод: orange
# Второй элемент
print(fruits[1]) # Вывод: peach
# Последний элемент
print(fruits[-1]) # Вывод: lemon
Индексация в Python начинается с 0. У первого элемента индекс ноль — то есть никакого отступа нет. У второго элемента — персика — отступ уже есть, поэтому у него индекс равен 1
У индексов могут быть и отрицательные значения. Например, последний можно обозначить, как -1, а предпоследний — как -2.
Чтобы изменить элемент списка, ему нужно присвоить новое значение по индексу.
Например, вместо персика решили купить чернику:
fruits = ["orange", "peach", "lemon"]
fruits[1] = "blueberry"
print(fruits) # Вывод: ['orange', 'blueberry', 'lemon']
Объединение двух списков в один называется конкатенацией. Пригодится, если, например, нужно отобразить списки товаров из разных категорий на одной странице.
list1 = ['orange', 'peach']
list2 = ['shampoo', 'soap']
combined_list = list1 + list2
print(combined_list) # Вывод: ['orange', 'peach', 'shampoo', 'soap']
В этом примере создали два списка, затем объединили их в новый с помощью оператора +.
Распаковка списка на переменные позволяет взять элементы списка и присвоить их отдельным переменным. Сначала разберём это на фруктах:
fruits = ['orange', 'peach', 'lemon']
first, second, third = fruits
print(first) # Вывод: 'orange'
print(second) # Вывод: 'peach'
print(third) # Вывод: 'lemon'
Теперь есть три отдельные переменные, каждая из которых содержит один элемент из списка. В веб-разработке распаковка может быть полезна, когда есть данные в виде списка и нужно упростить работу с каждым элементом отдельно. Например, получили от пользователя список параметров (имя, возраст, адрес) и распаковали его на отдельные переменные:
name, age, address = user_info
print(name) # Вывод: 'Ivan'
print(age) # Вывод: 25
print(address) # Вывод: 'Prospekt Lenina, 3'
Теперь не нужно обращаться к элементам списка через индексы, а вместо этого использовать переменные name, age и address. Это делает код более читаемым и удобным для работы.
Перебор элементов полезен, когда нужно выполнить одно и то же действие для каждого из них — отправить данные на сервер, отобразить их на веб-странице или выполнить вычисления.
Допустим, в веб-приложении для интернет-магазина нужно вывести список всех товаров в корзине и отобразить его на странице. Для этого используют цикл for:
shopping_cart = ['orange', 'peach', 'lemon']
for item in shopping_cart:
print("Товар в корзине: {item}")
Результат получится такой:
Товар в корзине: orange
Товар в корзине: peach
Товар в корзине: lemon
Сравнение списков может быть полезно, когда нужно убедиться, что данные, введённые пользователем, совпадают с ожидаемыми данными. Например, при проверке ответов на вопросы викторины или при сравнении списков выбранных товаров. Разберём пример с викториной.
correct_answers = ['orange', 'peach', 'lemon']
user_answers = ['orange', 'peach', 'lemon']
if correct_answers == user_answers:
print("Все ответы правильные!")
else:
print("Некоторые ответы неверные.")
С помощью оператора == Python проверяет, содержат ли оба списка одинаковое количество элементов и совпадает ли их содержание. Если оба условия выполняются, результат сравнения будет True (Все ответы правильные!), иначе False (Некоторые ответы неверные).
Научиться работать со списками Python можно самостоятельно — используя документацию к языку, статьи и форумы. Этот способ подойдёт тем, у кого уже есть опыт программирования, — изучать новый язык проще, когда пишешь код на другом. Если опыта в разработке нет и хочется сменить профессию, подойдут профильные курсы по программированию. Например, на курсе «Python-разработчик» студенты не просто учатся кодить, а разбираются, как разрабатывать полноценные проекты. Осваивать язык помогает обратная связь от опытных разработчиков. Это помогает быстрее прогрессировать, чем в самостоятельном обучении.
У Python есть несколько встроенных функций:
● len() — возвращает количество элементов в списке. Например, количество товаров в корзине покупок.
fruits = ['orange', 'peach', 'lemon']
print(len(fruits)) # Вывод: 3
● max(list) — возвращает максимальный элемент списка. Например, для отображения самого дорогого товара из списка предложений.
numbers = [1, 2, 3]
print(max(numbers)) # Вывод: 3
● min(list) — возвращает минимальный элемент списка. Например, для отображения самого дешёвого товара из списка предложений.
numbers = [1, 2, 3]
print(min(numbers)) # Вывод: 1
● sorted(list, key=None, reverse=False) — возвращает новый отсортированный список. Например, для отображения товаров на странице в отсортированном виде без изменения оригинального списка товаров.
fruits = ['peach', 'orange', 'lemon']
sorted_fruits = sorted(fruits)
print(sorted_fruits) # Вывод: ['orange', 'peach', 'lemon']
Дальше разберём основные методы списков Python.
Чтобы добавить элемент в конец списка, используют метод append(). Для добавления элемента в конкретное место списка — метод insert().
Примеры:
fruits = ["orange", "peach", "lemon"]
# Добавление элемента в конец списка
fruits.append("orange")
print(fruits) # Вывод: ['orange', 'peach', 'lemon', 'orange']
# Вставка элемента на вторую позицию
fruits.insert(1, "blueberry")
print(fruits) # Вывод: ['orange', 'blueberry', 'peach', 'lemon', 'orange']
Возвращает индекс первого вхождения элемента x. Представим, что есть веб-приложение для интернет-магазина, и нужно узнать, когда пользователь впервые добавил определённый товар в корзину:
shopping_cart = ['orange', 'peach', 'lemon', 'peach', 'fig']
# Найти первое вхождение 'peach'
first_peach_index = shopping_cart.index('peach')
print(f"Первый 'peach' был добавлен на позицию: {first_peach_index}")
Эту информацию можно использовать, чтобы изменить или выделить первый добавленный товар в корзине. Например, чтобы предложить скидку на него или удалить, если пользователь добавил несколько таких товаров и решил убрать из корзины только один.
Удаляет первое вхождение элемента x. Например, после того как нашли персик в предыдущем примере, удалили его:
fruits = ['orange', 'peach', 'lemon']
fruits.remove('peach')
print(fruits) # Вывод: ['orange', 'lemon']
Возвращает количество вхождений элемента x. Например, чтобы проанализировать популярность товара — сколько раз его добавили в список покупок всех пользователей.
fruits = ['orange', 'peach', 'lemon', 'peach']
count = fruits.count('peach')
print(count) # Вывод: 2
Удаляет и возвращает элемент с индексом i. Если индекс не указан, удаляет и возвращает последний элемент.
fruits = ['orange', 'peach', 'lemon']
last_fruit = fruits.pop()
print(fruits) # Вывод: ['orange', 'peach']
print(last_fruit) # Вывод: 'lemon'
Удаляет все элементы из списка. Например, пользователь решает очистить всю корзину покупок.
fruits = ['orange', 'peach', 'lemon']
fruits.clear()
print(fruits) # Вывод: []
Сортирует список по одному из параметров. Например, по алфавиту или цене. Представим, что список фруктов нужно отсортировать по алфавиту:
fruits = ['peach', 'orange', 'lemon']
fruits.sort()
print(fruits) # Вывод: ['orange', 'peach', 'lemon']
У метода sort есть параметр reverse. Его можно использовать для более сложной сортировки — в обратном порядке.
Вот как это будет выглядеть с фруктами:
fruits = ['peach', 'orange', 'lemon']
fruits.sort(reverse=True)
print(fruits) # Вывод: ['lemon', 'peach', 'orange']
☝ reverse=True сортирует список в обратном порядке, то есть в порядке убывания. Например, от Z до A для строк или от большего к меньшему для чисел.
Возвращает копию списка. Например, перед выполнением какой-то операции со списком (фильтрации или сортировки) нужно сохранить оригинальный список, чтобы восстановить его позже.
fruits = ['orange', 'peach', 'lemon']
fruits_copy = fruits.copy()
print(fruits_copy) # Вывод: ['orange', 'peach', 'lemon']
Срезы списков позволяют получить часть списка. В итоге получается новый список, который содержит часть элементов оригинального. В разработке такой список называют подсписком.
Теперь разберём, как работают срезы в разработке. Представим список товаров на веб-странице интернет-магазина:
products = ['laptop', 'smartphone', 'tablet', 'headphones', 'smartwatch']
Какие можно сделать срезы:
● Срез от начала списка до определённого индекса. Берём все элементы от начала списка до индекса 2 (не включая индекс 2), чтобы показать пользователю на главной странице два самых популярных товара:
top_products = products[:2]
print(top_products) # Вывод: ['laptop', 'smartphone']
● Срез от определённого индекса до конца списка. Например, берём все элементы от индекса 2 до конца списка, чтобы создать раздел «Новые поступления» и показать все товары, кроме первых двух, потому что их временно нет в наличии:
new_arrivals = products[2:]
print(new_arrivals) # Вывод: ['tablet', 'headphones', 'smartwatch']
● Срез между двумя индексами. Например, берём элементы от индекса 1 до индекса 4 (не включая индекс 4), чтобы отобразить товары в среднем ценовом диапазоне:
middle_products = products[1:4]
print(middle_products) # Вывод: ['smartphone', 'tablet', 'headphones']
● Срез с шагом. Допустим, нужно провести A/B-тестирование оформления карточек товаров: двум группам пользователей показать разные дизайны. Нечётные позиции товаров в списке будут с дизайном 1, а чётные — с дизайном 2. Чтобы отделить чётные товары от нечётных в списке, выбираем каждый второй:
alternate_products = products[::2]
print(alternate_products) # Вывод: ['laptop', 'tablet', 'smartwatch']
● Срез в обратном порядке. Пригодится, чтобы отобразить список товаров в обратном порядке и показать последние добавленные товары в начале:
reversed_products = products[::-1]
print(reversed_products) # Вывод: ['smartwatch', 'headphones', 'tablet', 'smartphone', 'laptop']
● Срез с отрицательными индексами. Например, можно взять последние два элемента списка, чтобы показать два самых новых товара в разделе «Новые поступления»:
last_two_products = products[-2:]
print(last_two_products) # Вывод: ['headphones', 'smartwatch']
Совет эксперта
Читать также: