Кортеж (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) превратить список в кортеж; |