В современных языках программирования есть предустановленные типы: символы, числа или классы. Есть и коллекции — массивы, списки и прочие структуры данных — множества элементов фиксированной или динамической размерности.
При объявлении переменной под объект выделяется оперативная память. Например, для строки в четыре символа — восемь байт. Каждый символ занимает адрес в оперативной памяти, а строка представляет собой массив этих адресов. В C-подобных языках массивы создаются определенного размера, под тип объектов. В Python же нет ограничений ни по типу элементов множества, ни по его размерности. То есть список в Python — это динамическая коллекция указателей.
Как решать типовые задачи
🚀 Объявить список
Синтаксическая конструкция для создания списка Python:
mylst = [1, 2, 3, 4, 5]
Mylst — название переменной. В скобках указали элементы.
В Python есть ключевое слово list(). Это функция, которая либо создает пустой список, либо приводит к списку итерируемый объект. Чтобы создать пустой объект списка с помощью функции, напишите:
mylst = list()
🚀 Обратиться к элементу
Списки — это множества элементов. Чтобы обратиться к ним, указывают индекс — порядковый номер. В отличие, например, от словаря, который позволяет получать значение по ключу. Индекс первого элемента — 0, второго — 1, третьего — 2.
Так обратитесь к пятому элементу списка:
mylst = [1, 2, 3, 4, 5]
print(mylst[4])
5
🚀 Добавить элемент
Сделайте это с помощью встроенной функции append():
mylst = [1, 2, 3, 4, 5]
mylst.append(6)
print(mylst)
[1, 2, 3, 4, 5, 6]
Либо с помощью метода insert(), который принимает два аргумента — индекс и значение:
mylst = [1, 2, 3, 4, 5]
mylst.insert(1, 25)
print(mylst)
[1, 25, 2, 3, 4, 5]
❗ Если добавить элемент с помощью этого метода, произойдет смещение, а не его замена.
🚀 Изменить элемент
Для этого установите новое значение по его индексу:
mylst = [1, 2, 3, 4, 5]
mylst[1] = None
print(mylst)
[1, None, 3, 4, 5]
В Python необязательно, чтобы элементы коллекции были одного типа.
🚀 Удалить элемент
Для этого воспользуйтесь встроенной функцией del():
mylst = [1, 2, 3, 4, 5, 4, 3, 2, 1]
del mylst[2]
print(mylst)
[1, 2, 4, 5, 4, 3, 2, 1]
Либо примените метод удаления remove():
mylst = [1, 2, 3, 4, 5, 4, 3, 2, 1]
mylst.remove(2)
print(mylst)
[1, 3, 4, 5, 4, 3, 2, 1]
🚀 Проверить на вхождение
Чтобы проверить, есть ли указанный элемент в списке, воспользуйтесь ключевым словом in:
mylst = [1, 2, 3, 4, 5]
print(None in mylst)
False
print(3 in mylst)
True
🚀 Объединить списки
Вызовите метод extend():
mylst = [1, 2]
mylst1 = [3, 4]
mylst2 = [5]
mylst.extend(mylst1)
print(mylst)
[1, 2, 3, 4]
mylst.extend(mylst2)
print(mylst)
[1, 2, 3, 4, 5]
Или оператор сложения с присваиванием:
mylst = [1, 2]
mylst1 = [3, 4]
mylst2 = [5]
mylst += mylst1
print(mylst)
[1, 2, 3, 4]
mylst += mylst2
print(mylst)
[1, 2, 3, 4, 5]
🚀 Копировать список
Воспользуйтесь методом списков copy():
mylst = [1, 2, 3, 4, 5]
mylst_copy = mylst.copy()
print(mylst)
[1, 2, 3, 4, 5]
print(mylst_copy)
[1, 2, 3, 4, 5]
Либо создайте полный срез:
mylst = [1, 2, 3, 4, 5]
mylst_copy = mylst[::]
print(mylst)
[1, 2, 3, 4, 5]
print(mylst_copy)
[1, 2, 3, 4, 5]
🚀 Выполнить итерацию по списку
Воспользуйтесь конструкцией for:
mylst = [1, 2, 3, 4, 5]
for item in mylst:
print(item)
1
2
3
4
5
Итерацию еще выполняют с помощью цикла while:
mylst = [1, 2, 3, 4, 5]
i = 0
while True:
try:
print(mylst[i])
except IndexError:
print("Done!")
break
i += 1
1
2
3
4
5
Done!
«Если вы думаете, что хорошо разбираетесь в списках, подумайте еще раз. Дело в том, что списки в Python больше похожи на то, что мы привыкли называть массивами в других языках программирования, а не на связанные списки, которые обычно приходят на ум при слове „список“».
Пол Бэрри «Изучаем программирование на Python»
Методы списков
✔️ index
Позволяет узнать индекс элемента, возвращает его при первом совпадении:
mylst = [1, 2, 3, 4, 5, 4, 3, 2, 1]
print(mylst.index(3))
2
✔️ count
Позволяет получить количество элементов списка:
mylst = [1, 2, 3, 4, 5, 4, 3, 2, 1]
count_for_one = mylst.count(1)
print(count_for_one)
2
count_for_five = mylst.count(5)
print(count_for_five)
1
✔️ clear
Полностью очищает список:
mylst = [1, 2, 3, 4, 5]
mylst.clear()
print(mylst)
[]
✔️ sort
Сортирует список по указанному ключу. Принимает два необязательных аргумента: key — ключ, по которому производят сортировку, булевый флаг reverse — сортирует объекты в обратном порядке. По умолчанию в качестве ключа используют значение переменной:
mylst = [1, 3, 2, 4, 5]
mylst.sort() # reverse=False
print(mylst)
[1, 2, 3, 4, 5]
✔️ reverse
Инвертирует последовательность элементов:
mylst = [1, 2, 3, 4, 5]
mylst.reverse()
print(mylst)
[5, 4, 3, 2, 1]
✔️ pop
Позволяет получить элемент и удаляет его из списка. Принимает индекс в качестве необязательного аргумента. По умолчанию это последний элемент:
mylst = [1, 2, 3, 4, 5]
x = mylst.pop()
print(x)
5
print(mylst)
[1, 2, 3, 4]
y = mylst.pop(2)
print(y)
3
print(mylst)
[1, 2, 4]
Встроенные функции
✅ Получение длины любой коллекции
Используйте функцию len():
mylst = [1, 2, 3, 4, 5]
list_length = len(mylst)
print(list_length)
5
✅ Возврат элемента с максимальным значением
Используйте функцию max():
mylst = [1, 2, 3, 4, 5, 4, 3, 2, 1]
max_value = max(mylst)
print(max_value)
5
✅ Возврат элемента с минимальным значением
Используйте функцию min():
mylst = [1, 2, 3, 4, 5]
min_value = min(mylst)
print(min_value)
1
✅ Приведение к типу
Из любого итерируемого объекта можно получить список. Для этого передайте итерируемый объект функции list(). Этим объектом может быть строка, множество, кортеж или генератор:
myset = {1, 2, 3, 4}
mytuple = (5, 6)
mystring = "Test string"
lst1 = list(myset)
lst2 = list(mytuple)
lst3 = list(mystring)
print(lst1)
[1, 2, 3, 4]
print(lst2)
[5, 6]
print(lst3)
['T', 'e', 's', 't', ' ', 's', 't', 'r', 'i', 'n', 'g']
Работа со срезами
Срезы позволяют создавать новые списки на основе существующего. Можно получить полную копию списка или некоторые элементы. Для этого используют шаг или указывают начальный и крайний индексы:
mylst = [1, 2, 3, 4, 5]
mylst_slice_0 = mylst[::] # полная копия
print(mylst_slice_0)
[1, 2, 3, 4, 5]
mylst_slice_1 = mylst[0:2] # крайний индекс (не включается в срез)
print(mylst_slice_1)
[1, 2]
mylst_slice_2 = mylst[::2] # указание шага
print(mylst_slice_2)
[1, 3, 5]
Синтаксис работы со срезами:
# имя переменной[стартовый индекс:конечный индекс:шаг]
variable_name[start_index:end_index:step]
Генератор списков
Эта конструкция позволяет легко создавать списки:
mylst = [_ for _ in range(6)]
print(mylst)
[0, 1, 2, 3, 4, 5]
Вы можете указать условия для генерации элементов:
mylst = [x if x % 2 == 0 else "odd" for x in range(20)]
print(mylst)
[0, 'odd', 2, 'odd', 4, 'odd', 6, 'odd', 8, 'odd', 10, 'odd', 12, 'odd', 14, 'odd', 16, 'odd', 18, 'odd']
Главное о списках в Python
- Списки — это коллекции указателей на элементы. В Python необязательно, чтобы все элементы списка были одного типа.
- Список создают с помощью функции list(), генератора списков или срезов.
- Решать типовые задачи позволяют методы списков: insert() — добавить элементы, remove() — удалить, extend() — объединить, copy() — копировать. А еще index(), sort() и другие.
- В Python есть встроенные функции, чтобы работать с объектами. Например, del(), list(), len(), max(), min().
Изучайте Python на онлайн-курсе от Skypro «Python-разработчик». Вас ждут 400 часов теории и практики, живые вебинары для разбора домашек. Сделаете четыре проекта для портфолио, получите диплом о переподготовке и помощь в поиске работы: создадите цепляющее резюме и подготовитесь к собеседованиям.