Переменные и типы данных: список, кортеж, словарь, множество
Переменные и типы данных
Продолжая разговор о переменных и типах данных, стоит разобрать и более сложные структуры, с которыми можно работать с помощью Python – списки, кортежи, словари и множества.
· Списки
Список – это тип данных, позволяющий содержать более простые значения “в одном контейнере”. Список (list) дает возможность взять, например, несколько строк и собрать их в едином контейнере. Списочный тип данных присваивается переменной с использованием квадратных скобок при ее инициализации.
weather = [25, 23, 20, 29]
type(weather)
> list
Если попробовать вывести на экран значение переменной со списочным типом данных, то отображаться будет весь список так, как он был изначально создан.
weather
> [25, 23, 20, 29]
Для обращения к отдельным элементам внутри списка и работы с ними используются индексы. Индекс – это адрес элемента внутри списка, в Python он обозначается числовым значением. При этом индексация элементов внутри списка начинается с нуля.
print(weather[0])
print(weather[3])
> 25
> 29
Для работы со списочным типом данных Python предлагает и другие встроенные операции, например, взятие длины списка. Определить длину списка можно с помощью функции len(), где в качестве аргумента указывается наименование изучаемой переменной списка.
len(weather)
> 4
Значения элементов внутри уже созданных списков можно изменять с помощью обращения к ним через индекс. При этом пользователь будет получать ошибку IndexError, если попытается обратиться к элементу с индексом, выходящим за рамки длины списка.
weather[0] = 26
weather
> [26, 23, 20, 29]
Язык Python предлагает множество методов для работы со списками. Например, для добавления элемента в конец списка используется метод append(), для вставки элемента по индексу – insert(), а для получения индекса элемента с требующимся значением – метод index().
Для применения метода к списку необходимо указать наименование переменной, затем через “.” вызвать метод и указать для него аргумент в скобках.
weather.append(31)
weather
> [26, 23, 20, 29, 31]
weather.insert(1, 24) # первый аргумент — индекс, второй — значение
weather
> [26, 24, 23, 20, 29, 31]
weather.append(24)
print(weather)
weather.index(24) # возвращает индекс первого элемента со значением 24
> [26, 24, 23, 20, 29, 31, 24]
> 1
Интересной особенностью списков является то, что внутри них можно собирать элементы разных типов данных – по соседству с числовыми значениями могут находиться строки и другие более сложные типы данных. Внутрь списков в Python даже можно вкладывать другие списки.
weather.append(’29’)
weather
> [26, 24, 23, 20, 29, 31, 24, ’29’]
· Кортежи
Другой тип данных, довольно похожий на списки – это кортежи. Кортеж (tuple) отличается тем, что является статичной структурой, в него нельзя добавить элемент, как нельзя убрать или изменить уже заданные. Создаются кортежи похожим на списки образом, но с круглыми скобками вместо квадратных.
weather = (25, 23, 20, 29)
type(weather)
> tuple
При выведении на экран переменной, которая содержит кортеж, он будет отображаться целиком. Но можно обращаться и к отдельным элементам внутри кортежа – по соответствующим индексам.
weather
> (25, 23, 20, 29)
print(weather[0])
print(weather[3])
> 25
> 29
Кортежи поддерживают все операции над списками, не изменяющие список, то есть сложение, умножение на число, методы index() и count() и некоторые другие операции.
Кортеж полезен тем, что он защищен от изменений, как намеренных, так и случайных. Кроме того, кортеж обладает меньшим размером, чем список, и не требует столько памяти, сколько требуется для работы со списками.
a = (1, 2, 3, 4, 5, 6)
b = [1, 2, 3, 4, 5, 6]
a.__sizeof__() # возвращает размер объекта в байтах
> 72
b.__sizeof__()
> 88
· Словари
Словарь (dict) – еще одна составная структура для работы с переменными в Python. Используется он для хранения значений в паре с ключами. Словарь создается через фигурные скобки, внутри которых через двоеточие задаются пары ключ-значение.
weather = {
‘Понедельник’: 25,
‘Вторник’: 23,
‘Среда’: 20,
‘Четверг’: 29
}
type(weather)
> dict
weather
> {‘Понедельник’: 25, ‘Вторник’: 23, ‘Среда’: 20, ‘Четверг’: 29}
К элементам словаря можно обращаться по ключу. Ключ служит идентификатором для соответствующего ему значения.
weather[‘Понедельник’]
> 25
Для добавления в словарь новой пары достаточно указать имя словаря, в квадратных скобках назвать новый ключ и задать значение с помощью оператора присваивания.
weather[123] = 456
weather
> {‘Понедельник’: 26, ‘Вторник’: 23, ‘Среда’: 20, ‘Четверг’: 29, 123: 456}
При этом ключи могут быть представлены разными типами данных, однако ключом не могут быть изменяемые значения, в частности списки.
weather[[1, 2, 3]] = ‘list’
> TypeError
У словарей также есть множество полезных методов. Метод values() позволяет получить все значения из словаря, а keys() – все ключи данного словаря. Можно получать из словарей и пары ключ-значение целиком, для этого используется метод items().
for item in weather.values():
print(item)
> 26
23
20
29
456
tuple
for item in weather.keys():
print(item)
> Понедельник
Вторник
Среда
Четверг
123
(1, 2, 3)
for k, v in weather.items():
print(f'{k}: {v}’)
> Понедельник: 26
Вторник: 23
Среда: 20
Четверг: 29
123: 456
(1, 2, 3): tuple
· Множества
Множества в Python – это наборы элементов, между которыми не установлены отношения порядка. Создаются множества (set или frozenset) с помощью фигурных скобок и простого перечисления элементов внутри них при инициализации переменных.
set_1 = {‘a’, ‘b’, ‘c’, ‘d’}
set_1
> {‘a’, ‘b’, ‘c’, ‘d’}
Повторяющиеся элементы внутри множества удаляются, а множества с одинаковыми элементами внутри совпадают, даже если изначально были заданы по-разному.
set_2 = {‘a’, ‘b’, ‘c’, ‘d’, ‘a’, ‘b’, ‘a’}
set_2
> {‘a’, ‘b’, ‘c’, ‘d’}
set_1 == set_2
> True
Множества удобно использовать для удаления повторяющихся элементов. Для этого можно перевести переменную из списочного типа данных во множества встроенной функцией set().
letters = [‘a’, ‘b’, ‘c’, ‘d’, ‘a’, ‘b’, ‘a’]
letters = set(letters)
letters
> {‘a’, ‘b’, ‘c’, ‘d’}
В Python также можно задавать неизменяемые множества, которые по своим свойствам будут похожи на кортежи.
set_3 = frozenset([‘a’, ‘b’, ‘c’, ‘d’, ‘a’, ‘b’, ‘a’])
set_3
> frozenset({‘a’, ‘b’, ‘c’, ‘d’})
set_3.add(‘e’)
> AttributeError