Дикий Григорий

Full-stack веб-разработчик

Структуры данных в Python: Списки и кортежи

Структуры данных играют основную роль в построении ваших приложений. Некоторые из них лучше подходят для реализации одних идей, а другие других. Структуры - это сущности которые хранят в себе данные. В основном они используются для хранения связанных данных. Язык Python включает в себя все необходимые структуры для построения ПО: списки, кортежи, словари и множества.

Список

Список - упорядоченный набор элементов. Список элементов в Python должен быть заключен в квадратные скобки. После создания списка можно его изменять: удалять элементы, добавлять их. За счет этого, говорят, что списки - изменяемая структура данных. На самом деле эта структура данных представляет собой класс и соответственно имеет как методы, так и свойства. Так же к спискам относится то, что его элементы не обязаны иметь один тип, а также списки поддерживают вложенность.

list = ['one', 'two', [1, 2, 3]] # Пример создания списка

Методы списка:

  • append(x) - добавляет элемент в конец списка
  • extend(list) - расширяет список, добавляя в его конец элементы другого списка
  • insert(i, x) - вставить элемент в место по индексу i
  • remove(x) - удаляет первый элемент списке совпавший со значением x
  • pop(x) - удаляет первый элемент и возвращает его
  • index(x, [start [, end]]) - возвращает индекс первого совпадающего элемента с x от индекса start до end
  • count(x) - возвращает количество элементов совпадающих с x
  • sort([функция сравнения]) - сортировка элементов списка
  • reverse() - разворачивает список
  • copy() - возвращается копия списка
  • clear() - очищает список
  • len() - длина списка

Так же списки поддерживают арифметические сложения, где:

  • список + список - объединение списков
  • список * число - повторение списка n раз

Для проверки является ли элемент частью списка можно использовать оператор in:

>>> list = ['one', 'two']
>>> 'one' in list
True
К спискам можно обращаться используя индексы и срезы:
>>> list = [1, 2, 3, 4, 5, 6]
>>> list.append('seven')
>>> list
[1, 2, 3, 4, 5, 6, 'seven']
>>> list[7]
Traceback (most recent call last):
  File "", line 1, in 
IndexError: list index out of range
>>> list[6]
'seven'

Стоить заметить, что индексация идет начиная с нуля, а не с 1, чем говорит сообщение: IndexError: list index out of range.

Срезы

Списки поддерживают срезы. Срез — извлечение из строки одного символа или некоторого фрагмента подстроки или подпоследовательности. По умолчанию синтаксис среза следующий: [start:stop:step], где последний аргумент не является обязательным. Также если указывать отрицательные параметры, то срез будет начинаться с конца. Давайте рассмотрим все на примерах:


>>> list = [1, 2, 3, 4, 5, 6, 7]
>>> list[1:]
[2, 3, 4, 5, 6, 7]
>>> list[3:5]
[4, 5]
>>> list[3:-2]
[4, 5]
>>> list[::2]
[1, 3, 5, 7]

Кортеж

Кортеж хранит некоторые сущности вместе. Главная особенность кортежей состоит в том, что они неизменяемы также как и строки, что означает, что модифицировать их невозможно. Стоит отметить, что как и список кортеж может хранить в себе любые типы данных. По своей сути это те же списки, только без возможности изменения и занимают в памяти меньше места. Записываются кортежи в круглых скобках:

tup = (1, 2, 3, 4, 5, 6, 7)
Стоит отметить, что для кортежей необязательно наличие скобок, то есть они могут быть записаны как:
>>> tup = 1, 2, 3, 4, 5, 6
>>> type(tup)

Кортежи, как и списки, поддерживают сложение и умножение:

>>> tup + (7, 8, 9)
(1, 2, 3, 4, 5, 6, 7, 8, 9)
>>> tup * 2
(1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6)

Стоит отметить, что кортеж можно создать из итерируемого объекта:

>>> tup = tuple('Hello!')
>>> tup
('H', 'e', 'l', 'l', 'o', '!')

Также кортежи имеют два метода:

  • count(x) - возвращает количество x в кортеже
  • index(x) - возвращает индекс первого попавшегося x

К кортежам, как и к спискам, применимо понятие упаковки и распаковки элементов:

>>> tup = 1, 2, 3
>>> a, b, c = tup
>>> a
1
>>> b
2
>>> c
3
>>> list = [1, 2, 3]
>>> d, e, f = list
>>> d
1
>>> e
2
>>> f
3

Кортеж можно преобразовать в список, как собственно и список в кортеж:

>>> list = [1, 2, 3]
>>> tup = tuple(list)
>>> tup
(1, 2, 3)