Программирование • 09 июля 2024 • 5 мин чтения

Как работать со списками в Python

Научимся создавать, изменять содержимое списков и сортировать их.

Что такое список (list) в 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

У 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

Чтобы добавить элемент в конец списка, используют метод 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']

index(x, [start], [end])

Возвращает индекс первого вхождения элемента x. Представим, что есть веб-приложение для интернет-магазина, и нужно узнать, когда пользователь впервые добавил определённый товар в корзину:

shopping_cart = ['orange', 'peach', 'lemon', 'peach', 'fig']
# Найти первое вхождение 'peach'
first_peach_index = shopping_cart.index('peach')
print(f"Первый 'peach' был добавлен на позицию: {first_peach_index}")

Эту информацию можно использовать, чтобы изменить или выделить первый добавленный товар в корзине. Например, чтобы предложить скидку на него или удалить, если пользователь добавил несколько таких товаров и решил убрать из корзины только один.

remove(x)

Удаляет первое вхождение элемента x. Например, после того как нашли персик в предыдущем примере, удалили его:

fruits = ['orange', 'peach', 'lemon']
fruits.remove('peach')
print(fruits) # Вывод: ['orange', 'lemon']

count(x)

Возвращает количество вхождений элемента x. Например, чтобы проанализировать популярность товара — сколько раз его добавили в список покупок всех пользователей.

fruits = ['orange', 'peach', 'lemon', 'peach']
count = fruits.count('peach')
print(count) # Вывод: 2

pop([i])

Удаляет и возвращает элемент с индексом i. Если индекс не указан, удаляет и возвращает последний элемент.

fruits = ['orange', 'peach', 'lemon']
last_fruit = fruits.pop()
print(fruits) # Вывод: ['orange', 'peach']
print(last_fruit) # Вывод: 'lemon'

clear()

Удаляет все элементы из списка. Например, пользователь решает очистить всю корзину покупок.

fruits = ['orange', 'peach', 'lemon']
fruits.clear()
print(fruits) # Вывод: []

sort()

Сортирует список по одному из параметров. Например, по алфавиту или цене. Представим, что список фруктов нужно отсортировать по алфавиту:

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=False (по умолчанию) сортирует список в порядке возрастания. Например, от A до Z для строк или от меньшего к большему для чисел.

reverse=True сортирует список в обратном порядке, то есть в порядке убывания. Например, от Z до A для строк или от большего к меньшему для чисел.

copy()

Возвращает копию списка. Например, перед выполнением какой-то операции со списком (фильтрации или сортировки) нужно сохранить оригинальный список, чтобы восстановить его позже.

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']

Совет эксперта

Артём Стрельцов
В обучении важно как можно больше практиковаться. Изучение языка — это всегда скорее про практику, чем про теорию. По каждой теме важно «набивать руку». А чтобы было меньше ошибок, рекомендую внимательно читать документацию к Python и пользоваться Python Debugger. Это программа, которая выполняет отладку в коде — помогает находить ошибки, которые мешают коду работать, как было задумано.
Статью подготовили:
Артём Стрельцов
Яндекс Практикум
Разработчик
Яндекс Практикум
Редактор
Анастасия Павлова
Яндекс Практикум
Иллюстратор

Дайджест блога: ежемесячная подборка лучших статей от редакции

Поделиться

Успейте начать учебу в Практикуме до конца ноября со скидкой 20%

Wed Jul 31 2024 23:22:59 GMT+0300 (Moscow Standard Time)