Список list в Python: что это и как с этим работать
Список (list) - это один из самых часто используемых контейнеров в Python, который позволяет хранить много данных одновременно.
Как создать список (list) в Python
Мы можем создать список просто обернув значения в квадратные скобки []
:
ages = [10, 40, 20]
print(ages)
Вывод:
[10, 40, 20]
Тут мы создали список из трех элементов: 10, 40 и 20.
В списке мы можем хранить элементы любого типа, не только числа:
# разные типы в одном списке
list_a = [1, "два", 3]
# список с одинаковыми значениями
list_b = [1, 1, 2, 1]
# пустой список
list_c = []
Конструктор list
Конструктор list
позволяет создать список без использования квадратных скобок из существующей последовательности любого типа:
# пустой список
empty_list = list()
# список символов
char_list = list("абв")
print(char_list)
Вывод:
['а', 'б', 'в']
Давайте попробуем создать список чисел с помощью функции range
:
numbers = list(range(1, 10, 3))
print(numbers)
Вывод:
[1, 4, 7]
Получение элемента из списка по индексу
Чтобы получить элемент из списка, мы можем указать номер нужного элемента в квадратных скобках [<номер>]
:
l = ["ноль", "один", "два"]
item = l[2]
print(item)
Вывод:
два
Как поменять элемент в списке
Чтобы поменять элемент в списке, мы можем указать новое значение элемента по индексу после знака равно =
:
numbers = [1, 2, 3]
print('до: ', numbers)
numbers[1] = 9
print('после:', numbers)
Вывод:
до: [1, 2, 3]
после: [1, 9, 3]
Как получить длину списка
Для получения длины списка в Python есть специальная функция - len
. Ей нужно передать объект типа list
, и она вернет количество элементов в нем:
numbers = [1, 2, 3, 4]
print('len:', len(numbers))
Вывод:
len: 4
Отрицательный индекс
Python позволяет нам получить номер элемента с конца при помощи отрицательного индекса:
ages = [18, 24, 31]
print('последний: ', ages[-1])
print('предпоследний:', ages[-2])
Вывод:
последний: 31
предпоследний: 24
Цикл for для списков
Python позволяет нам использовать цикл for
вместе со списками. Для этого просто нужно указать список после ключевого слова in
:
students = ["Вася", "Маша", "Петя"]
for student in students:
print(student)
Вывод:
Вася
Маша
Петя
Список списков
Можно хранить список списков любой вложенности:
matrix = [
[0, 1, 0],
[0, 2, 0],
[0, 0, 0],
]
# получить элемент
print("matrix[0][1] =", matrix[0][1])
# изменить элемент
matrix[2][2] = 2
print(matrix)
Вывод:
matrix[0][1] = 1
[[0, 1, 0], [0, 2, 0], [0, 0, 2]]
Добавить элемент в список
Мы разобрались, как создать список и изменить его отдельные элементы. Но как нам добавить элементы в уже существующий список? У типа list
есть несколько очень удобных методов для этого.
list.append
Метод .append(item)
позволяет добавить один элемент в конец списка:
l = [0, 1, 2]
l.append(3)
print(l)
Вывод:
[0, 1, 2, 3]
list.extend
Если мы хотим добавить сразу несколько элементов в конец, то мы можем воспользоваться методом .extend(items)
:
a = [0, 1, 2]
b = [3, 4]
a.extend(b)
print(a)
Вывод:
[0, 1, 2, 3, 4]
list.insert
Если нужно вставить элемент в середину списка, то .insert(item)
— это наш выбор:
l = [3, 1, 0]
# вставить 2 по индексу 1
l.insert(1, 2)
print(l)
Вывод:
[3, 2, 1, 0]
Удаление элемента из списка
Теперь, когда мы научились добавлять элементы в существующий список, давайте научимся и удалять. Для этого у типа list
тоже есть есть несколько методов, но начнем мы со специального ключевого слова del
.
Ключевое слово del
Python позволяет удалить любой элемент из списка по индексу с помощью del
:
l = [0, -3, 1]
del l[1]
print(l)
Вывод:
[0, 1]
list.remove
Метод .remove(value)
удаляет первое вхождение элемента в списке:
l = [1, -3, 2, -3]
l.remove(-3)
print(l)
Вывод:
[1, 2, -3]
list.pop
Метод .pop(index=-1)
удаляет элемент на указанной позиции из списка и возвращает удаленное значение:
l = [1, -3, 2, -4]
# по умолчанию удаляется последний элемент
print("pop:", l.pop(), " l:", l)
# тут мы удаляем второй элемент из списка
print("pop:", l.pop(1), " l:", l)
Вывод:
pop: -4 l: [1, -3, 2]
pop: -3 l: [1, 2]
list.clear
Метод .clear()
удаляет все элементы из списка:
l = [1, 2, 3]
l.clear()
print(l)
Вывод:
[]
Получение части (среза) списка
В Python существует элегантный механизм для получения определенной части списка. Чтобы получить срез, используйте [<начало>:<конец>:<шаг>]
.
Элемент с индексом <конец>
не будет включен в срез. Начало, конец и шаг можно не указывать:
l = [0, 1, 2, 3, 4]
# тут срез будет равен всему списку
print("l[:] =", l)
# тут мы берем элементы 1, 2 (конец не включается)
print("l[1:3] =", l[1:3])
# тут мы берем все элементы начиная с первого
print("l[1:] =", l[1:])
# можно использовать отрицательные индексы
# тут мы берем все элементы начиная с предпоследнего
print("l[-2:] =", l[-2:])
# тут мы берем элементы с нулевого по третий через один
print("l[0:3:2] =", l[0:3:2])
# тут мы разворачиваем массив
print("l[::-1] =", l[::-1])
l[:] = [0, 1, 2, 3, 4]
l[1:3] = [1, 2]
l[1:] = [1, 2, 3, 4]
l[-2:] = [3, 4]
l[0:3:2] = [0, 2]
l[::-1] = [4, 3, 2, 1, 0]
Срезы также можно использовать, чтобы менять список:
l = [0, 1, 2, 3, 4]
print("создали: ", l)
l[1:3] = [9, 8, 7]
print("поменяли:", l)
l[1:4] = []
print("удалили: ", l)
Вывод:
создали: [0, 1, 2, 3, 4]
поменяли: [0, 9, 8, 7, 3, 4]
удалили: [0, 3, 4]
Срезы - это очень удобный инструмент при работе со списками. Я рекомендую разобраться с ними. Это сильно поможет вам в дальнейшем.
Поиск значений в списке
Давайте теперь посмотрим на то, как мы можем искать элементы в списке.
Ключевое слово in
Конструкция вида value in [1, 2, 3]
вернет True
, если value
присутствует в списке:
l = [1, 2, 3]
print("2 in l:", 2 in l)
print("5 in l:", 5 in l)
Вывод:
2 in l: True
5 in l: False
list.index
Метод .index(value)
возвращает индекс первого элемента, который равен искомому значению. Если элемент найти не удалось, то index
вернет ошибку:
l = [1, 2, 3, 2]
print("l.index(2):", l.index(2))
print()
l.index(5) # <- ошибка
Вывод:
l.index(2): 1
Traceback (most recent call last):
...
ValueError: 5 is not in list
Если мы хотим найти элемент только в части списка, то мы можем передать аргументы start
и end
:
l = [1, 2, 3, 2, 5, 6]
# найти значение 2 с третьего элемента по пятый (не включительно)
print(l.index(2, 2, 4))
Вывод:
3
Как вы можете видеть, метод index
вернул позицию второй двойки.
list.count
Метод .count(value)
можно использовать для подсчета количества определенных элементов в списке:
l = [1, 2, 3, 2, 3]
print(l.count(3))
Вывод:
2
Сортировка списка
Для сортировки списка можно воспользоваться методом .sort()
:
l = [3, 2, 4, 1]
l.sort()
print(l)
Вывод:
[1, 2, 3, 4]
Если нам нужно отсортировать элементы по убыванию, то мы можем указать reverse=True
:
l = [3, 2, 4, 1]
l.sort(reverse=True)
print(l)
Вывод:
[4, 3, 2, 1]
Мы также можем поменять значение, по которому будут сортироваться элементы в списке:
l = ["один", "два", "десять"]
l.sort()
print("обычный sort:", l)
# тут мы сортируем по длине
l.sort(key=len)
print("key sort: ", l)
Вывод:
обычный sort: ['два', 'десять', 'один']
key sort: ['два', 'один', 'десять']
Разворот списка
Мы уже видели, что мы можем получить элементы в обратном порядке при помощи среза с отрицательным шагом:
l = [1, 2, 3]
print(l[::-1])
Вывод:
[3, 2, 1]
Но в Python можно развернуть список без использования среза. Для этого нужно воспользоваться методом .reverse()
:
l = [1, 2, 3]
l.reverse()
print(l)
Вывод:
[3, 2, 1]
Создание копии списка
Как и в случае с разворотом, мы можем воспользоваться срезами для создания копии:
a = [1, 2, 3]
b = a[:]
a[1] = 0
print("a:", a)
print("b:", b)
Вывод:
a: [1, 0, 3]
b: [1, 2, 3]
Но если вы не хотите использовать срезы, то можно создать копию при помощи метода .copy()
:
a = [1, 2, 3]
b = a.copy()
a[1] = 0
print("a:", a)
print("b:", b)
Вывод идентичен предыдущему:
a: [1, 0, 3]
b: [1, 2, 3]
Генератор списков в Python
В Python есть очень удобный синтаксис для того, чтобы создавать списки по определенным условиям. Выглядят эти генераторы следующим образом:
# простой генератор
print("1.", [x for x in range(0, 3)])
# генератор с фильтрацией
print("2.", [x for x in range(0, 3) if x % 2 == 0])
# генератор с изменением элемента
print("3.", [x * 2 for x in range(0, 3)])
# генератор с двойным циклом
print("4.", [i * j for i in [1, 2] for j in range(1, 3)])
Вывод:
1. [0, 1, 2]
2. [0, 2]
3. [0, 2, 4]
4. [1, 2, 2, 4]
Разложение списков
В Python можно разложить список на отдельные значения. Для этого нужно слева от знака равно указать переменные, в которые будут записаны элементы списка:
a, b, c = [1, 2, 3]
print("sum:", a + b + c)
Вывод:
sum: 6
Но если количество элементов в списке не равно количеству переменных, то произойдет ошибка:
a, b = [1, 2, 3, 4, 5]
Ошибка:
Traceback (most recent call last):
...
ValueError: too many values to unpack (expected 2)
Функция type для списков
Если вам нужно проверить, что в переменной хранится список, то вы можете воспользоваться функцией type
:
number = 1
l = [1, 2, 3]
print("number is a list:", type(number) == list)
print("l is a list: ", type(l) == list)
Вывод:
number is a list: False
l is a list: True
Сложение списков
В Python’е можно объединить два списка при помощи оператора сложения +
:
a = [1, 2, 3]
b = [4, 5, 6]
print(a + b)
Вывод:
[1, 2, 3, 4, 5, 6]
Умножение списков
Часто бывает удобно создать список, в котором значения будут повторяться. Для этого можно умножить список на число:
a = [1, 2]
b = a * 3
print(b)
Вывод:
[1, 2, 1, 2, 1, 2]
Сравнение списков
Если у вас есть два списка, которые нужно сравнить между собой, то вы можете воспользоваться стандартным ==
:
a = [1, 2, 3]
b = [1, 2, 3]
c = [3, 2, 1]
print("a == b:", a == b)
print("b == c:", b == c)
Вывод:
a == b: True
b == c: False
Упражнения
- Создание и вывод списка:
Напишите программу на Python, которая позволяет пользователю вводить данные до тех пор, пока он не введет слово “стоп”. Все введенные данные должны сохраняться в списке. После ввода слова “стоп”, программа должна выводить весь список. - Манипуляции со списком:
Напишите программу, которая просит пользователя ввести 5 чисел. Сохраните эти числа в список, а затем выведите на экран максимальное, минимальное число и среднее арифметическое всех чисел в списке. - Операции со списками:
Создайте два списка: один со строками, а другой с о числами. Напишите программу, которая объединяет эти списки в один и выводит результат. Попробуйте использовать методы, такие какappend
иextend
, и посмотрите, как они влияют на результат.
Если хотите всегда быть в курсе последних новостей в мире программирования и IT, подписываетесь на мой Telegram-канал, где я делюсь свежими статьями, новостями и полезными советами. Буду рад видеть вас среди подписчиков!
Обсуждение