В этой статье мы узнаем все о списках Python. Как они создаются, как получить срезы (slice) списка, добавление или удаление элементов из них и так далее.
Python предлагает несколько составных типов данных, часто называемых последовательностями. Список является одним из наиболее часто используемых и очень универсальных типов данных, используемых в Python.
В программировании на Python список создается путем помещения всех элементов в квадратные скобки [], разделенных запятыми.
Он может иметь любое количество элементов, которые могут быть разных типов (целое число, число с плавающей запятой, строка и т. д.).
# Пустой список
my_list = []
# Список целых чисел
my_list = [1, 2, 3]
# Список со смешанными типами данных
my_list = [1, "Hello", 3.4]
Кроме того, список может даже иметь другой список в качестве элемента. Это называется вложенным списком.
# Вложенный список
my_list = ["mouse", [8, 4, 6], ['a']]
Рассмотрим два способа доступа к элементам списка.
Мы можем использовать оператор индекса [] для доступа к элементу в списке. Индекс начинается с 0. Список из 5 элементов будет иметь индекс от 0 до 4.
Попытка получить доступ к элементу за пределами диапазона, вызовет IndexError. Индекс должен быть целым числом. Мы не можем использовать float или другие типы, это приведет к TypeError.
Доступ к вложенному списку осуществляется с помощью вложенной индексации.
my_list = ['p','r','o','b','e']
# Output: p
print(my_list[0])
# Output: o
print(my_list[2])
# Output: e
print(my_list[4])
# Ошибка! Для индексации можно использовать только целое число
# my_list[4.0]
# Вложенный список
n_list = ["Happy", [2,0,1,5]]
# Вложенная индексация
# Output: a
print(n_list[0][1])
# Output: 5
print(n_list[1][3])
Python допускает отрицательную индексацию для своих последовательностей. Индекс -1 относится к последнему элементу, -2 — ко второму с конца элементу и т. д.
my_list = ['p','r','o','b','e']
# Output: e
print(my_list[-1])
# Output: p
print(my_list[-5])
Мы можем получить доступ к ряду элементов в списке, используя оператор среза (двоеточие).
my_list = ['p','r','o','g','r','a','m','i','z']
# Элементы с 3-го по 5-й
print(my_list[2:5])
# Элементы, начиная с 4-го
print(my_list[:-5])
# Элементы с шестого до конца
print(my_list[5:])
# Элементы от начала до конца
print(my_list[:])
Срезы лучше всего визуализировать, как показано ниже. Поэтому, если мы хотим получить доступ к диапазону, нам нужны два индекса, которые будут вырезать эту часть из списка.
Список является изменяемым, то есть его элементы могут быть изменены в отличие от строки или кортежа.
Мы можем использовать оператор присваивания (=), чтобы изменить элемент или диапазон элементов.
# Элементы, которые будем менять
odd = [2, 4, 6, 8]
# Меняем 1-й элемент
odd[0] = 1
# Output: [1, 4, 6, 8]
print(odd)
# Меняем со 2-го по 4-й элементы
odd[1:4] = [3, 5, 7]
# Output: [1, 3, 5, 7]
print(odd)
Мы можем добавить один элемент в список с помощью метода append() или добавить несколько элементов с помощью метода extended().
odd = [1, 3, 5]
odd.append(7)
# Output: [1, 3, 5, 7]
print(odd)
odd.extend([9, 11, 13])
# Output: [1, 3, 5, 7, 9, 11, 13]
print(odd)
Мы также можем использовать оператор + для объединения двух списков. Это также называется конкатенацией.
Оператор * повторяет список заданное количество раз.
odd = [1, 3, 5]
# Output: [1, 3, 5, 9, 7, 5]
print(odd + [9, 7, 5])
# Output: ["re", "re", "re"]
print(["re"] * 3)
Кроме того, мы можем вставить один элемент в нужное место с помощью метода insert() или вставить несколько элементов, втиснув его в пустой фрагмент списка.
odd = [1, 9]
odd.insert(1,3)
# Output: [1, 3, 9]
print(odd)
odd[2:2] = [5, 7]
# Output: [1, 3, 5, 7, 9]
print(odd)
Мы можем удалить один или несколько элементов из списка, используя ключевое слово del. Оно может даже полностью удалить список.
my_list = ['p','r','o','b','l','e','m']
# Удаляем один элемент
del my_list[2]
# Output: ['p', 'r', 'b', 'l', 'e', 'm']
print(my_list)
# Удаляем несколько элементов
del my_list[1:5]
# Output: ['p', 'm']
print(my_list)
# Удаляем весь список
del my_list
# Ошибка: список не определен
print(my_list)
Мы можем использовать метод remove() для удаления данного элемента или метод pop() для удаления элемента по указанному индексу.
Метод pop() удаляет и возвращает последний элемент, если индекс не указан. Это помогает нам реализовывать списки в виде стеков (структура данных «первый вошел, последний вышел»).
Мы также можем использовать метод clear() для очистки списка.
my_list = ['p','r','o','b','l','e','m']
my_list.remove('p')
# Output: ['r', 'o', 'b', 'l', 'e', 'm']
print(my_list)
# Output: 'o'
print(my_list.pop(1))
# Output: ['r', 'b', 'l', 'e', 'm']
print(my_list)
# Output: 'm'
print(my_list.pop())
# Output: ['r', 'b', 'l', 'e']
print(my_list)
my_list.clear()
# Output: []
print(my_list)
Наконец, мы также можем удалить элементы в списке, назначив пустой список фрагменту элементов.
>>> my_list = ['p','r','o','b','l','e','m']
>>> my_list[2:3] = []
>>> my_list
['p', 'r', 'b', 'l', 'e', 'm']
>>> my_list[2:5] = []
>>> my_list
['p', 'r', 'm']
Методы, которые доступны для объекта list в программировании на Python, приведены в таблице ниже.
Они доступны как list.method(). Некоторые из методов уже были показаны выше.
Методы списка Python | |
append() | Добавляет элемент в конец списка |
extend() | Добавляет все элементы списка в другой список |
insert() | Вставить элемент по указанному индексу |
remove() | Удаляет элемент из списка |
pop() | Удаляет и возвращает элемент по указанному индексу |
clear() | Удаляет все элементы из списка |
index() | Возвращает индекс первого соответствующего элемента |
count() | Возвращает количество элементов, переданных в качестве аргумента |
sort() | Сортировка элементов в списке в порядке возрастания |
reverse() | Обратный порядок элементов в списке |
copy() | Возвращает поверхностную копию списка |
Некоторые примеры методов списка Python:
my_list = [3, 8, 1, 6, 0, 8, 4]
# Output: 1
print(my_list.index(8))
# Output: 2
print(my_list.count(8))
my_list.sort()
# Output: [0, 1, 3, 4, 6, 8, 8]
print(my_list)
my_list.reverse()
# Output: [8, 8, 6, 4, 3, 1, 0]
print(my_list)
Метод append() добавляет элемент в конец списка. Длина списка увеличивается на один.
Примечание:
- Данная функция не возвращает новый список, а просто записывает значение параметра в существующий.
- По сути, append() является аналогом метода push() в других языках программирования.
lst = [1, 3, 8, 12]
# Вставляем число в конец списка
lst.append(7)
# Output: [1, 3, 8, 12, 7]
print(lst)
Функция extend() расширяет список, добавляя все элементы списка, передаваемого в качестве аргумента, в конец.
Примечание:
lst = [1, 3, 8]
# Вставляем новый список в конец списка lst
lst.extend([2, 7])
# Output: [1, 3, 8, 2, 7]
print(lst)
Метод insert(idx, x) вставляет элемент в список по заданному индексу.
Параметры функции:
lst = [1, 3]
# Вставляем число 2 в список на позиции 1
lst.insert(1, 2)
# Output: [1, 2, 3]
print(lst)
Примечание: Если необходимо добавить элемент в начало списка, то нужно указать нулевую позицию.
lst = [1, 3]
# Вставляем число 2 в начало списка
lst.insert(0, 2)
# Output: [2, 1, 3]
print(lst)
Методcount() возвращает количество вхождений элемента в список.
lst = [4, 1, 5, 4, 0, 4]
# Определяем количество чисел 4 в списке lst
# с помощью функции count()
# Output: 3
print(lst.count(4))
Метод index(x, start, end) возвращает индекс элемента в списке.
Если одно и тот же значение элемента присутствует более одного раза, метод получает порядковый номер первого вхождения.
Параметры функции:
Возвращаемые значения:
Ошибки:
lst = [2, 3, 5, 2, 10, 7]
# Узнаем позицию числа 2
# с помощью функции index()
# Output: 0
print(lst.index(2))
Примечание: Индексы в Python начинаются с 0, а не с 1.
Также можно найти элемент указав диапазон для поиска, с помощью дополнительных параметров функции.
lst = [2, 3, 5, 2, 10, 7]
# Получаем позицию числа 2 в диапазоне с индекса 3 по 5
# используя функцию index()
# Output: 3
print(lst.index(2, 3, 5))
Метод pop(idx) — это функция, которая возвращает и удаляет значение из списка по заданному индексу.
Параметры функции:
Ошибки:
lst = [1, 3, 8, 12]
# Output: 3
print(lst.pop(1))
# Output: [1, 8, 12]
print(lst)
Примечание: Если индекс не у казан, то будет взят и удален из списка последний элемент.
lst = [1, 3, 8, 12]
# Output: 12
print(lst.pop())
# Output: [1, 3, 8]
print(lst)
Метод remove(x) — удаляет элемент из списка по значению.
Параметры функции:
Примечание: Функция удаляет первое вхождение объекта из списка.
lst = [1, 3, 8, 12, 7]
# Убираем значение 8 из списка
lst.remove(8)
# Output: [1, 3, 12, 7]
print(lst)
Метод clear() очищает список, удаляя все элементы.
lst = [1, 3, 8, 12, 7]
# Самый простой способ очистить список
lst.clear()
# Output: []
print(lst)
Метод copy() возвращает поверхностную (без рекурсивного копирования вложенных элементов) копию списка.
old_lst = [1, 3, 8, 12, 7]
# Производим копирование списка
new_lst = old_lst.copy()
# Изменяем список
new_lst.append(8)
# Output: [1, 3, 8, 12, 7]
print(old_lst)
# Output: [1, 3, 8, 12, 7, 8]
print(new_lst)
Примечание:
- Если вы скопируете список с помощью оператора =. Например так new_lst = old_lst, то при изменении new_lst также изменится и old_lst.
- Если список имеет вложенные списки, то для копирования необходимо использовать copy.deepcopy(x)
- Функция copy() работает также как выражение new_lst = old_lst[:]
Функция reverse() инвертирует список, то есть переворачивает список в обратном порядке.
lst = [1, 3, 8, 12, 7]
# Инвертируем список
lst.reverse()
# Output: [7, 12, 8, 3, 1]
print(lst)
Примечание: Реверс списка можно произвести с помощью выражения lst = lst[::-1]
lst = [1, 3, 8, 12, 7]
# Сортировка списка
lst.sort()
# Output: [1, 3, 7, 8, 12]
print(lst)
Понимание списка — это элегантный и лаконичный способ создания нового списка из существующего списка в Python.
Понимание списка состоит из выражения, за которым следует оператор for в квадратных скобках.
Вот пример, чтобы составить список, в котором каждый элемент имеет возрастающую мощность 2.
pow2 = [2 ** x for x in range(10)]
# Output: [1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
print(pow2)
Этот код эквивалентен
pow2 = []
for x in range(10):
pow2.append(2 ** x)
Понимание списка может дополнительно содержать операторы for или if. Необязательный оператор if может отфильтровывать элементы для нового списка. Вот несколько примеров.
>>> pow2 = [2 ** x for x in range(10) if x > 5]
>>> pow2
[64, 128, 256, 512]
>>> odd = [x for x in range(20) if x % 2 == 1]
>>> odd
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
>>> [x+y for x in ['Python ','C '] for y in ['Language','Programming']]
['Python Language', 'Python Programming', 'C Language', 'C Programming']
Мы можем проверить, существует ли элемент в списке или нет, используя ключевое слово in.
my_list = ['p','r','o','b','l','e','m']
# Output: True
print('p' in my_list)
# Output: False
print('a' in my_list)
# Output: True
print('c' not in my_list)
Используя цикл for, мы можем перебирать каждый элемент списка.
for fruit in ['apple','banana','mango']:
print("I like",fruit)