Python. Tuples (Кортежи) (ru)

11.2.4.1 создавать кортеж;
11.2.2.1 выполнять доступ к элементам строк, списков, кортежей;

Python. Tuples (Кортежи)

Вы уже знакомы с такми коллекциями как list, set, string. 

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

# кортеж из двух элементов; элементы одного кортежа могут быть разного типа данных
card = ('Amir', 5)
# создание пустого кортежа
empty = ()
# один элемент в кортеже всегда указывается с запятой
marks = (4,)
# длина, значение элемента, сложение используется как при работе со списками
print (len(card), card[1], card + marks)
--------------------------------------------------
Output: 2 5 ('Amir', 5, 4)

Сравнение кортежей

Кортежи можно сравнивать друг с другом.

(1, 2, 3) == (1, 2, 3) # True
(1, 2) == (1, 3) # False
(1, 2) < (1, 3) # True
(1, 2) < (5,) # True
('12', 'school') < ('12', 'class') # False
# нельзя сравнивать элементы кортежа с разными типами данных
(1, 2) < ('5', 'Амир') # '<' not supported  between instances  of 'int' and 'str'

Обратите внимание, что операции == и !=  применимы к любому кортежу, независимо от типа элемента. Но операции <><=>= применимы только в том случае, если соответствующие элементы являются кортежами одного типа. Следовательно, можно сравнивать ('12', 'school') и ('12', 'class'), но кортежи (1, 2) и ('5', 'Амир') сравнивать нельзя — Python интерпретатор выдаст ошибку. В этом случае сравнение происходит последовательно поэлементно, и если элементы равны, просматривается следующий элемент.

Неизменяемость

Наиболее важным техническим отличием кортежей от списков является неизменность. Как и в случае со строкой, элемент нельзя добавить в кортеж с помощью метода append, а существующий элемент нельзя изменить, проиндексировав его.

Есть и смысловая разница. Предположим, что списки с большей вероятностью объединяют неопределенное количество однородных сущностей. В этом случае кортеж — это быстрый способ объединить несколько разных объектов с разными значениями под одним именем.

Еще одно приятное различие между кортежами и списками заключается в том, что они могут быть элементами множества:

a = {('12', 'school'), ('12', 'class')}
print (a) # -> {('12', 'school'), ('12', 'class')}

Множественное присваивание

Использование кортежей позволяет выполнять множественное присваивание. Это делает прекрасную функцию обмена значениями в Python работающей.

a, b = b, a

Как известно, слева от знака присваивания = должно стоять имя переменной или имя списка с индексом или несколькими индексами. Они указывают, куда «поместить» значение, записанное справа от знака присваивания. Однако слева от знака присваивания можно написать и кортеж таких обозначений (имен переменных), а справа кортеж значений, которые должны в них помещаться. Значения справа указываются в том же порядке, что и переменные слева (здесь скобки вокруг кортежа необязательны):

mark, firstname = 5, 'Diana'
# тоже самое, что и
mark = 5
firstname = 'Diana'

В приведенном выше примере мы создали кортеж справа от  = прямо на той же строке. Но можно приготовить заранее: 

cards = [('Амир', '5'), ('Данель', '4'), ('Индира', '5')]
firstname, mark = cards[0]
print ('Имя:', firstname) # выведет Амир
print ('Оценка ученика:', mark) # выведет 5

Cначала вычисляются все значения справа, и только потом они подставляются в левую часть оператора присваивания. Поэтому можно, например, поменять местами значения переменных a и b, написав: a, b = b, a.

a, b = 1, 2 # сейчас a == 1 и b == 2
a, b = b, a # сейчас a == 2 и b == 1

Выполните трассировку следующего фрагмента кода.

# обмен значениями
a, b, с = 3, 2, 1
b, a, c = c, a, b
print(b, c, a)

В приведенном ниже примере будет напечатано "1 2 3".

Благодаря кортежам многие алгоритмы становятся волшебно лаконичными. Например, вычисление чисел Фибоначчи:

n = int(input())
f1, f2 = 0, 1
for i in range(n):
   print(f2)
   f1, f2 = f2, f1 + f2

Вопросы:

1. Что такое кортеж?

2. Назовите свойства кортежа.

3. Объясните, что значит множественное присваивание.

Упражнения:

Задачи:

Категория: Programming languages | Добавил: bzfar77 (07.11.2022)
Просмотров: 1002 | Теги: tuple, Python, кортеж, data structure | Рейтинг: 0.0/0
Всего комментариев: 0
avatar