Одно значение мы легко можем хранить в переменной. Но когда у нас есть последовательность значений? Не будем же мы использовать несколько переменных… Для этих целей в Python есть Списки, Словари и Кортежи.
Списки
Это те же массивы, но в Python их называют списками. Список заключен в квадратные скобки и выглядит, как значения перечисленные через запятую. Это могут быть строковые значения, могут быть числовые. Например:
>>> a = [1, 2, 3, 4, 5]
или
>>> b = ['One', 'Two', 'Three', 'Four', 'Five']
Нумерация значений в списке начинается с 0. Поэтому, если мы хотим вывести ‘Three’, то напишем:
>>> print(b[2])
Чтобы добавить значение в список, можно использовать append():
>>> b.append('Six')
Теперь список b выглядит вот так:
>>> b
['One', 'Two', 'Three', 'Four', 'Five', 'Six']
Обратиться к элементу можно так же отрицательным индексом:
>>> print(b[-1])
Получим ‘Six’
Списки можно сортировать с помощью sort()
>>> a = [4, 8, 3, 9, 2]
>>> a.sort()
>>> print(a)
[2, 3, 4, 8, 9]
Вообще объявить пустой список можно так:
>>> a = []
Словари
Словари в Python – неупорядоченные коллекции произвольных объектов с доступом по ключу. Их иногда ещё называют ассоциативными массивами или хеш-таблицами. Чтобы работать со словарём, его нужно создать. Создать его можно несколькими способами.
Во-первых, с помощью литерала:
>>> d = {}
>>> d
{}
>>> d = {'dict': 1, 'dictionary': 2}
>>> d
{'dict': 1, 'dictionary': 2}
Во-вторых, с помощью функции dict:
>>> d = dict(short='dict', long='dictionary')
>>> d
{'short': 'dict', 'long': 'dictionary'}
>>> d = dict([(1, 1), (2, 4)])
>>> d
{1: 1, 2: 4}
В-третьих, с помощью метода fromkeys:
>>> d = dict.fromkeys(['a', 'b'])
>>> d
{'a': None, 'b': None}
>>> d = dict.fromkeys(['a', 'b'], 100)
57
>>> d
{'a': 100, 'b': 100}
В-четвертых, с помощью генераторов словарей, которые очень похожи на генераторы
списков:
>>> d = {a: a ** 2 for a in range(7)}
>>> d
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36}
Теперь попробуем добавить записей в словарь и извлечь значения ключей:
>>> d = {1: 2, 2: 4, 3: 9}
>>> d[1]
2
>>> d[4] = 4 ** 2
>>> d
{1: 2, 2: 4, 3: 9, 4: 16}
>>> d['1']
Traceback (most recent call last):
File "", line 1, in
d['1']
KeyError: '1'
Как видно из примера, присвоение по новому ключу расширяет словарь, присвоение по существующему ключу перезаписывает его, а попытка извлечения несуществующего ключа порождает исключение. Для избежания исключения есть специальный метод (см. ниже), или можно перехватывать исключение.
Что же можно еще делать со словарями? Да то же самое, что и с другими объектами: встроенные функции, ключевые слова (например, циклы for и while), а также специальные методы словарей.
Методы словарей
dict.clear() – очищает словарь.
dict.copy() – возвращает копию словаря.
classmethod dict.fromkeys(seq[, value]) – создает словарь с ключами из seq и значением value (по умолчанию None).
dict.get(key[, default]) – возвращает значение ключа, но если его нет, не бросает исключение, а возвращает default (по умолчанию None).
dict.items() – возвращает пары (ключ, значение).
dict.keys() – возвращает ключи в словаре.
dict.pop(key[, default]) – удаляет ключ и возвращает значение. Если ключа нет, возвращает default (по умолчанию бросает исключение).
dict.popitem() – удаляет и возвращает пару (ключ, значение). Если словарь пуст, бросает исключение KeyError. Помните, что словари не упорядочены.
dict.setdefault(key[, default]) – возвращает значение ключа, но если его нет, не бросает исключение, а создает ключ с значением default (по умолчанию None).
dict.update([other]) – обновляет словарь, добавляя пары (ключ, значение) из other. Существующие ключи перезаписываются. Возвращает None (не новый словарь!).
dict.values() – возвращает значения в словаре.
Кортежи
Если есть списки, то зачем кортежи? Первое – они неизменны, защита от ошибочных изменений, второе – они меньше.
Создать пустой кортеж можно с помощью литерала кортежа или с помощью функции tuple()
>>> a = ()
или
>>> a = tuple()
А вот добавить кортеж так a = (‘Hello’) – НЕЛЬЗЯ! Получим переменную 🙂 Надо писать так:
>>> a = ('Hello', )
>>> a
('H', 'e', 'l', 'l', 'o')