Списки и строки имеют много общих свойств, например такие как операции индексации и среза. Это два примера типов данных последовательности. Поскольку Python является развивающимся языком, могут быть добавлены другие типы данных последовательности. Существует также другой стандартный тип данных последовательности - кортеж.
Применение кортежей:
collections.namedtuple()
. Кортеж состоит из нескольких значений, разделенных запятыми, например:
>>> t = 12345, 54321, 'hello!' >>> t[0] # 12345 >>> t # (12345, 54321, 'hello!') # кортежи могут быть вложенными >>> u = t, (1, 2, 3, 4, 5) >>> u # ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5)) # Кортежи неизменяемы: >>> t[0] = 88888 # Traceback (most recent call last): # File "<stdin>", line 1, in <module> # TypeError: 'tuple' object does not support item assignment # Кортежи могут содержать изменяемые объекты: >>> v = ([1, 2, 3], [3, 2, 1]) >>> v # ([1, 2, 3], [3, 2, 1])
Кортежи всегда заключаются в круглые скобки, так что вложенные кортежи всегда интерпретируются правильно. Кортежи могут быть записаны в коде с окружающими их скобками или без них, хотя часто скобки все равно необходимы, если кортеж является частью большего выражения. Кортежи невозможно изменить или присвоить другое значения отдельным элементам, однако можно создать кортежи, которые содержат изменяемые объекты, такие как списки.
Особая проблема заключается в создании кортежей, содержащих 0
или 1
элемент. В синтаксисе есть несколько причуд при их создании, к ним просто надо привыкнуть:
Некрасиво, но эффективно. Например:
# пустой кортеж >>> empty = () # 1 элемент с запятой в конце >>> singleton = 'hello', >>> len(empty) # 0 >>> len(singleton) # 1 >>> singleton # ('hello',)
Утверждение t = 12345, 54321, 'hello!'
- вот пример упаковки кортежей: значения 12345
, 54321
и 'hello!'
упакованы вместе в кортеж. Возможна и обратная операция - распаковка:
>>> x, y, z = t
Код выше называется распаковкой последовательности и работает для любой последовательности с правой стороны. Распаковка последовательности требует, чтобы в левой части знака равенства было столько же переменных, сколько элементов в последовательности. Обратите внимание, что множественное назначение на самом деле является просто комбинацией упаковки кортежа и распаковки последовательности.
Так-же дополнительно смотрите:
tuple()
.tuple
, кортежи в Python.