Python с нуля – часть 9: кортежи

 

PythonКортеж (tuple) в Python – это последовательность неизменяемых объектов. Кортежи очень схожи со списками, с той разницей – что элементы кортежа не могут быть изменены и используют обычные скобки, вместо квадратных, как в списках.

Кортеж создаётся простым присваиванием элементов, разделённых запятыми. Так же – их можно указывать в скобках. Например:

>>> tup1 =('physics','chemistry',1997,2000);
>>> tup2 =(1,2,3,4,5);
>>> tup3 ="a","b","c","d";

Пустой кортеж создаётся указанием пустых скобок:

>>> tup1 = ();

Что бы создать кортеж, содержащий только один элемент – тоже необходимо добавлять запятую:

>>> tup1 =(50,);
>>> print tup1[0]
50

Получение данных из кортежа

Что бы получить какой-то элемент из кортежа – используйте квадратные скобки с указанием индекса или индексов:

>>> tup1 = ('physics', 'chemistry', 1997, 2000);
>>> tup2 = (1, 2, 3, 4, 5, 6, 7 );
>>>
>>> print "tup1[0]: ", tup1[0]
tup1[0]:  physics
>>> print "tup2[1:5]: ", tup2[1:5]
tup2[1:5]:  (2, 3, 4, 5)

Обновление кортежей

Кортежи являются неизменяемыми последовательностями в Python, т.е. вы не может просто изменить элемент, присвоив ему новое значение. Однако – можно взять часть имеющегося кортежа и создать новый:

>>> tup1 = (12, 34.56);
>>> tup2 = ('abc', 'xyz');
>>>
>>> # Following action is not valid for tuples
... # tup1[0] = 100;
...
>>> # So let's create a new tuple as follows
... tup3 = tup1 + tup2;
>>> print tup3;
(12, 34.560000000000002, 'abc', 'xyz')

Удаление элементов кортежа

Удалить отдельный элемент из кортежа нельзя:

>>> del tup3[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion

Но – ничего не мешает создать новый, без ненужного элемента:

>>> tup1 = (1, 2, 3)
>>> del tup1[0]
>>> tup2 = tup1[:2]
>>> print tup2
(1, 2)

Что бы удалить кортеж полностью – используется тот же оператор del:

>>> tup = ('physics', 'chemistry', 1997, 2000);
>>>
>>> print tup;
('physics', 'chemistry', 1997, 2000)
>>> del tup;
>>> print "After deleting tup : "
After deleting tup :
>>> print tup;
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameE

Базовые операторы кортежей

Кортежи работают с операторами + и * так же, как и строки или списки – они используются для конкатенации и повторения, за исключением того – что в результате получится новый кортеж, а не список или строка.

Фактически, кортежи вообще поддерживают те же операции с последовательностями, как и строки:

Python Expression Results Description
len((1, 2, 3)) 3 длина;
(1, 2, 3) + (4, 5, 6) (1, 2, 3, 4, 5, 6) объединение;
[‘Hi!’] * 4 (‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’) повторение;
3 in (1, 2, 3) True членство;
for x in (1, 2, 3): print x, 1 2 3 итерация;

Индексы, срезы и матрицы

Так как кортежи являются последовательностями, индексы и срезы будут обрабатываться так же, как и для строк. Предположим, у нас имеется кортеж:

>>> L =('spam','Spam','SPAM!')
Python Expression Results Description
L[2] ‘SPAM!’ смещение всегда начинается с нуля
L[-2] ‘Spam’ отрицательный индекс: отсчёт с правой стороны списка
L[1:] [‘Spam’, ‘SPAM!’] срез получает «участки» кортежа

Нет закрывающих разделителей

Любой набор различных объектов разделённых запятыми, записанный без использования идентичных символов, т.е. квадратные скобки для списков или простые скобки для кортежей, по умолчанию будет считаться кортежами:

>>> print 'abc', -4.24e93, 18+6.6j, 'xyz';
abc -4.24e+93 (18+6.6j) xyz
>>> x, y = 1, 2;
>>> print "Value of x , y : ", x,y;
Value of x , y :  1 2

Встроенные методы кортежей

SN Function with Description
1 cmp(tuple1, tuple2)
сравнение элементов двух кортежей;
2 len(tuple)
количество элементов в кортеже;
3 max(tuple)
получить наибольший элемент кортежа;
4 min(tuple)
получить наименьший элемент кортежа;
5 tuple(seq)
превратить список в кортеж;