Как изменить кортеж python

Кортеж в Python похож на список. Только в отличие от списка кортеж — неизменяемый, то есть менять его элементы после создания нельзя.
В этой статье вы узнаете всё о кортежах в Python. Что такое кортежи, как их создавать, когда их использовать и какие существуют методы кортежей.

Кортеж в Python похож на список. Только в отличие от списка кортеж — неизменяемый, то есть менять его элементы после создания нельзя. 

Как создать кортеж

Чтобы создать кортеж, нужно поместить все элементы, разделенные запятыми, в круглые скобки (). Скобки не обязательны, но рекомендуем их использовать.

Кортеж может иметь любое количество элементов разных типов (целые числа, числа с плавающей точкой, списки, строки и т. д).

# Разные типы кортежей

# Пустой кортеж
my_tuple = ()
print(my_tuple)

# Кортеж с целыми числами
my_tuple = (1, 2, 3)
print(my_tuple)

# Кортеж с разными типами данных
my_tuple = (1, "Привет", 3.4)
print(my_tuple)

# Вложенный кортеж
my_tuple = ("мышь", [8, 4, 6], (1, 2, 3))
print(my_tuple)

Вывод:

()
(1, 2, 3)
(1, 'Привет', 3.4)
('мышь', [8, 4, 6], (1, 2, 3))

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

# упаковываем кортеж
my_tuple = 3, 4.6, "собака"
print(my_tuple)

# точно так же можно распаковать кортеж
a, b, c = my_tuple

print(a)      # 3
print(b)      # 4.6
print(c)      # собака

Вывод:

(3, 4.6, 'собака')
3
4.6
собака

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

my_tuple = ("привет")
print(type(my_tuple))  # <class 'str'>

# Создаем кортеж с одним элементом
my_tuple = ("привет",)
print(type(my_tuple))  # <class 'tuple'>

# Можно и без скобок
my_tuple = "привет",
print(type(my_tuple))  # <class 'tuple'>

Вывод:

<class 'str'>
<class 'tuple'>
<class 'tuple'>

Как получить элемент кортежа

1. По индексу

Мы можем использовать оператор индекса [], чтобы получить доступ к элементу кортежа. 

Примечание. Обратите внимание, что индексирование кортежа начинается с 0. То есть первый элемент кортежа имеет индекс 0.

Кортеж из 9 элементов будет иметь индексы от 0 до 8. Попытка получить доступ к индексу за пределами диапазона индексов кортежа (в нашем случае 9, 10 и т. д.) приведет к ошибке IndexeError.

Индекс должен быть целым числом, поэтому мы не можем использовать float или другие типы в качестве индекса. Это приведет к ошибке TypeError.

Точно так же доступ к вложенным кортежам осуществляется с помощью вложенной индексации, как показано в примере ниже.

my_tuple = ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')

print(my_tuple[0])   # 'c' 
print(my_tuple[5])   # 'h'

# Вызов print(my_tuple[9]) приведет к ошибке
# IndexError: list index out of range

# Вызов my_tuple[2.0] приведет к ошибке
# TypeError: list indices must be integers, not float
# Индекс должен быть целым числом

# вложенный кортеж
n_tuple = ("мышь", [8, 4, 6], (1, 2, 3))

# вложенное индексирование
print(n_tuple[0][3])       # 'ь'
print(n_tuple[1][1])       # 4

Вывод:

c
h
ь
4

2. По отрицательному индексу

Python допускает отрицательную индексацию коллекций (наборов значений). Она работает и с кортежами. 

Индекс -1 отсылает к последнему элементу, -2 — ко второму элементу с конца и так далее.

my_tuple = ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')

# Вывод: 'k'
print(my_tuple[-1])

# Вывод: 'c'
print(my_tuple[-9])

Вывод:

k
c

3. С помощью срезов

Получить доступ к диапазону элементов в кортеже можно с помощью оператора срезов :

Использование срезов еще называют слайсингом, от английского slicing — «нарезка».

my_tuple = ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')

# элементы со 2 по 4
# Вывод: ('o', 'd', 'e')
print(my_tuple[1:4])

# элементы от начала и до второго элемента
# Вывод: ('c', 'o')
print(my_tuple[:-7])

# два последних элемента
# Вывод: ('c', 'k')
print(my_tuple[7:])

# все элементы от начала до конца
# Вывод: ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')
print(my_tuple[:])

Вывод:

('o', 'd', 'e')
('c', 'o')
('c', 'k')
('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')

Как изменить кортеж

Никак. В отличие от списков, кортежи неизменяемы. Это значит, что элементы кортежа нельзя изменять после добавления в кортеж. Однако если элемент сам по себе является изменяемым типом данных (например, списком), его вложенные элементы менять уже можно.

Переназначить кортеж тоже можно.

my_tuple = (4, 2, 3, [6, 5])

# my_tuple[1] = 9
# Эта строка приведет к ошибке
# TypeError: 'tuple' object does not support item assignment

# Значения изменяемого элемента менять можно
my_tuple[3][0] = 9    # Вывод: (4, 2, 3, [9, 5])
print(my_tuple)

# Можно переназначить кортеж
my_tuple = ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')

# Вывод: ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')
print(my_tuple)

Вывод:

(4, 2, 3, [9, 5])
('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')

В Python кортежи можно объединить с помощью оператора +. Это называется конкатенацией.

С помощью оператора * можно повторить элементы в кортеже заданное количество раз. 

Оба оператора + и * приводят к созданию нового кортежа. 

# Конкатенация
#Вывод: (1, 2, 3, 4, 5, 6)
print((1, 2, 3) + (4, 5, 6))

# Повторение
# Вывод: ('Повторить', 'Повторить', 'Повторить')
print(("Повторить",) * 3)

Вывод:

(1, 2, 3, 4, 5, 6)
('Повторить', 'Повторить', 'Повторить')

Как удалить кортеж

Изменять элементы кортежа нельзя. Это значит, что удалять их тоже нельзя.

В Python можно только полностью удалить кортеж — с помощью ключевого слова del.

my_tuple = ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')

# нельзя удалить элементы кортежа
# TypeError: 'tuple' object doesn't support item deletion
# del my_tuple[3]

# зато можно удалить кортеж полностью
del my_tuple

# вызов приведет к ошибке NameError: name 'my_tuple' is not defined
print(my_tuple)

Вывод:

Traceback (most recent call last):
 File "<string>", line 12, in <module>
NameError: name 'my_tuple' is not defined

Методы кортежа

Методы добавления или удаления элементов недоступны для кортежа в силу его неизменяемости. 

Для кортежа существует только два метода: .count() и .index()

my_tuple = ('я', 'б', 'л', 'о', 'к', 'о',)

print(my_tuple.count('о'))  # Вывод: 2
print(my_tuple.index('к'))  # Вывод: 4

Вывод:

2
4

Другие операции с кортежами

1. Проверка на вхождение в кортеж

Мы можем проверить, существует ли тот или иной элемент в кортеже или нет, с помощью ключевого слова in и not in.

my_tuple = ('я', 'б', 'л', 'о', 'к', 'о',)

print('я' in my_tuple)
print('х' in my_tuple)
print('п' not in my_tuple)

Вывод:

True
False
True

2. Итерирование по кортежу

Для перебора элементов кортежа можно использовать цикл for

for name in ('Андрей', 'Маша'):
    print("Привет, ", name)

Вывод:

Привет, Андрей
Привет, Маша

Преимущества кортежа над списком

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

Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Кортежи

Основы Python

До этого момента мы встречались со строками, числами, булевыми значениями. Все это — простые типы данных, то есть они не включают в себя данные других типов.

Но часто в программировании приходится работать с несколькими типами данных одновременно. Именно поэтому во многих языках программирования есть составные типы — они могут включать в себя данные других типов.

Составные типы позволяют описывать сущности произвольной сложности, и поэтому приносят много пользы. В этом уроке мы познакомимся с кортежем — одним из составных типов данных в Python.

Что такое кортежи

Кортеж — это несколько значений, записанных через запятую. Вот несколько примеров:

rgb_colour = (255, 127, 64)
name_and_age = ('Bob', 42)
three_booleans = (True, False, True)
two_pairs_of_numbers = ((1, 2), (3, 4))

При этом кортеж может состоять из всего одного элемента:

tuple = (42,)  # Ставим запятую, чтобы указать на кортеж

Обратите внимание на запятую — ее нужно ставить даже после единственного элемента кортежа.

А теперь посмотрим на пример без запятой. В этом случае Python подумает, что мы хотим посчитать арифметическое выражение со скобками:

not_a_tuple = (42)  # Запятой нет, поэтому Python не считает это кортежем

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

also_tuple = 1, 2

Как изменить кортеж

Одна из особенностей кортежей в том, что это неизменяемый тип данных — то есть изменить кортеж после создания уже нельзя. Чтобы добавить новое значение, нужно создать новый кортеж.

При попытке изменить кортеж мы получим такую ошибку:

name_and_age = ('Bob', 42)
name_and_age[0] = 'Alice'
# Traceback (most recent call last)
# TypeError: 'tuple' object does not support item assignment
name_and_age # ('Bob', 42)

Как работать с кортежами

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

В коде это выглядит так:

def div_mod(a, b):
    quotient = a // b
    modulo = a % b
    return (quotient, modulo)

div_mod(13, 4)  # (3, 1)

Как извлекать значения из кортежа

Выше мы научились создавать кортежи, а теперь попробуем извлекать значения из них. Для этого достаточно обратиться к элементу кортежа по индексу:

name_and_age = ('Bob', 42)

name_and_age[0]  # 'Bob'
name_and_age[1]  # 42

Также у кортежа есть длина, которую можно получить с помощью функции len():

tuple = (42,)  # (42,)
len(tuple)     # 1
pair = (1, 2)  # (1, 2)
len(pair)      # 2

Как разделить значения из кортежа

Часто кортежи содержат значения разных типов. Сложно запомнить, каким индексом обозначается каждое значение.

Чтобы упростить работу, можно разобрать кортеж:

name_and_age = ('Bob', 42)

(name, age) = name_and_age
name  # 'Bob'
age   # 42

Также этот процесс может называться деструктуризацией или распаковкой.

Таким же способом можно получать и сразу разбирать значения, которые возвращает функция:

(quotient, modulo) = div_mod(13, 4)

Соответственно, кортеж из одного элемента разбирается так:

(a,) = (42,)
a  # 42

Если после имени переменной не поставить запятую, то синтаксической ошибки не будет, но в переменную a кортеж запишется целиком — ничего не распакуется. Это логическая ошибка — мы получим не тот результат, который ожидали.

Кортежи и множественное присваивание

Кортежи легко собирать и разбирать, поэтому в Python удобно делать множественное присваивание. Смотрите:

(a, b, c) = (1, 2, 3)
a  # 1
b  # 2
c  # 3

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

a = 100
b = 'foo'

(a, b) = (b, a)
a  # 'foo'
b  # 100

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Данный урок посвящен кортежам (tuple) в Python. Основное внимание уделено вопросу использования кортежей, почему иногда лучше применять их, а не списки, рассмотрены способы создания и основные приемы работы с кортежами. Также затронем тему преобразования кортежа в список и обратно.

Кортеж (tuple) – это неизменяемая структура данных, которая по своему подобию очень похожа на список. Как вы наверное знаете, а если нет, то, пожалуйста, ознакомьтесь с седьмым уроком, список – это изменяемый тип данных. Т.е. если у нас есть список a = [1, 2, 3] и мы хотим заменить второй элемент с 2 на 15, то мы может это сделать, напрямую обратившись к элементу списка.

>>> a = [1, 2, 3]
>>> print(a)
[1, 2, 3]
>>> a[1] = 15
>>> print(a)
[1, 15, 3]

С кортежем мы не можем производить такие операции, т.к. элементы его изменять нельзя.

>>> b = (1, 2, 3)
>>> print(b)
(1, 2, 3)
>>> b[1] = 15
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    b[1] = 15
TypeError: 'tuple' object does not support item assignment

Зачем нужны кортежи в Python?

Существует несколько причин, по которым стоит использовать кортежи вместо списков. Одна из них – это обезопасить данные от случайного изменения. Если мы получили откуда-то массив данных, и у нас есть желание поработать с ним, но при этом непосредственно менять данные мы не собираемся, тогда, это как раз тот случай, когда кортежи придутся как нельзя кстати. Используя их в данной задаче, мы дополнительно получаем сразу несколько бонусов – во-первых, это экономия места. Дело в том, что кортежи в памяти занимают меньший объем по сравнению со списками.

>>> lst = [10, 20, 30]
>>> tpl = (10, 20, 30)
>>> print(lst.__sizeof__())
32
>>> print(tpl.__sizeof__())
24

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

Создание, удаление кортежей и работа с его элементами

Создание кортежей

Для создания пустого кортежа можно воспользоваться одной из следующих команд.

>>> a = ()
>>> print(type(a))
<class 'tuple'>
>>> b = tuple()
>>> print(type(b))
<class 'tuple'>

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

>>> a = (1, 2, 3, 4, 5)
>>> print(type(a))
<class 'tuple'>
>>> print(a)
(1, 2, 3, 4, 5)

При желании можно воспользоваться функцией tuple().

>>> a = tuple((1, 2, 3, 4))
>>> print(a)
(1, 2, 3, 4)

Доступ к элементам кортежа

Доступ к элементам кортежа осуществляется также как к элементам списка – через указание индекса. Но, как уже было сказано – изменять элементы кортежа нельзя!

>>> a = (1, 2, 3, 4, 5)
>>> print(a[0])
1
>>> print(a[1:3])
(2, 3)
>>> a[1] = 3
Traceback (most recent call last):
  File "<pyshell#24>", line 1, in <module>
    a[1] = 3
TypeError: 'tuple' object does not support item assignment

Удаление кортежей

Удалить отдельные элементы из кортежа невозможно.

>>> a = (1, 2, 3, 4, 5)
>>> del a[0]
Traceback (most recent call last):
  File "<pyshell#26>", line 1, in <module>
    del a[0]
TypeError: 'tuple' object doesn't support item deletion

Но можно удалить кортеж целиком.

>>> del a
>>> print(a)
Traceback (most recent call last):
  File "<pyshell#28>", line 1, in <module>
    print(a)
NameError: name 'a' is not defined

Преобразование кортежа в список и обратно

На базе кортежа можно создать список, верно и обратное утверждение. Для превращения списка в кортеж достаточно передать его в качестве аргумента функции tuple().

>>> lst = [1, 2, 3, 4, 5]
>>> print(type(lst))
<class 'list'>
>>> print(lst)
[1, 2, 3, 4, 5]
>>> tpl = tuple(lst)
>>> print(type(tpl))
<class 'tuple'>
>>> print(tpl)
(1, 2, 3, 4, 5)

Обратная операция также является корректной.

>>> tpl = (2, 4, 6, 8, 10)
>>> print(type(tpl))
<class 'tuple'>
>>> print(tpl)
(2, 4, 6, 8, 10)
>>> lst = list(tpl)
>>> print(type(lst))
<class 'list'>
>>> print(lst)
[2, 4, 6, 8, 10]

P.S.

Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. На нашем сайте вы можете найти вводные уроки по этой теме. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
Книга: Pandas. Работа с данными

<<< Python. Урок 7. Работа со списками (list)   Python. Урок 9. Словари (dict)>>>

Работа с кортежами в Python  — практически ничем не отличается от работы со списками.  Кортежи и списки формируется одинаково, нет никаких различий. Самая главная разница в этих двух типах данных, заключается в том, что элементы списка могут меняться, а элементы кортежа не могут.

Как создать кортеж?

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

Кортеж, так же как и список может иметь любое количество элементов, и они могут быть разных типов (целое число, десятичное, строки, списки). Если вы посмотрите на тип данных кортежа через функцию type(), то мы с вами увидим, что нам вернется значение tuple, а список возвращает нам как вы помните list.

tuple = (1,2,3)

print(tuple)

Результат:

(1,2,3)

tuple2=("hello",1,2,3)

print(tuple2)

Результат:

('hello',1,2,3)

tuple3 = ("hello",1,2,3,[10,11,13])

print(tuple3)

Результат:

("hello",1,2,3,[10,11,12])

Упаковка кортежа

Кортеж в отличии от списка, так же может быть создан и без скобок.

tuple = 1,2.3,"hello"

print(tuple)

Результат:

(1,2.3,"hello")

#Распаковка кортежа

a,b,c = tuple

print(a)

print(b)

print(c)

Результат:

1

2.3

hello

При создании кортежа  с одним элементом, нельзя оставлять просто один элемент в скобках. Необходимо в конце элемента указать запятую, что бы Python понял что это именно кортеж, если мы не укажем запятую, то для Python это будет просто строка.

tuple = ("hello")

print(type(tuple)) # <class 'str'>

tuple = ("hello",)

print(type(tuple)) # <class 'tuple'>

Изменение кортежа

Как я уже ранее писал, кортеж это не изменяемая штука. Но все же можно изменить элементы внутри кортежа, при условии, что тип данных элемента внутри кортежа является изменяемым, например список.

tuple = (1,2,3, [6,5])

tuple[3][0] = 9 # Первый элемента вложенного списка в кортеж

print(tuple)

Результат:

(1,2,3[9,5])

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

print((1,2,3) + (4,5,6))

print(("Повтор",) * 3)

Результат:

(1,2,3,4,5,6)

("Повтор","Повтор","Повтор")

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

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

tuple = (1,2,3,4,54,56)

del tuple

print(tuple)

Результат:

NameError: name 'my_tuple' is not defined

В целом во всем остальном, списки и кортежи полностью идентичны в плане, проведения с ними операций. Срезы, индексация, отрицательная индексация, проверка на наличие элемента в кортеже, итерация по кортежу, все это делается так же как и со списками.

Преимущество кортежа перед списком

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

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

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

Кортеж в Питоне: свойства и особенности

1. Кортежи не поддерживают добавление и удаление элементов, но допускают расширение и дополнение для тех элементов, которые относятся к изменяемым типам (списки, словари), а также любые операции с элементами элементов:

        >>> numbers = ([1, 2, 3, 4], [5, 4, 5])
>>> numbers[1].extend([3, 5, 9])
>>> numbers[0].append([7, 7, 8])
>>> numbers[1][1] += 5
>>> print(numbers)
([1, 2, 3, 4, [7, 7, 8]], [5, 9, 5, 3, 5, 9])

    

2. Кортежи поддерживают неограниченный уровень вложенности:

        numbers = ((4, 5, 8, (5, 1, (5, 3))), (7, 2, (4, 5, (3, 1, 1))))
    

3. Кортежи работают немного быстрее, чем списки – это связано с особенностями хранения tuple в памяти:

        >>> from timeit import timeit
>>> times = 1000000
>>> t1 = timeit("list(['груша', 'виноград','яблоко', 'банан', 'апельсин'])", number=times)
>>> t2 = timeit("tuple(('груша', 'виноград','яблоко', 'банан', 'апельсин'))", number=times)
>>> diff = "{:.0%}".format((t2 - t1)/t1)
>>> print(f'Время копирования списка {times} раз: {t1}')
Время копирования списка 1000000 раз: 0.5761922669999961
>>> print(f'Время копирования кортежа {times} раз: {t2}')
Время копирования кортежа 1000000 раз: 0.22475764600000048
>>> print(f'Разница: {diff}')
Разница: -61%

    

4. Кортежи занимают меньше места в памяти:

        >>> from sys import getsizeof
>>> numbers1 = ((1, 2, 3, 4), (5, 4, 5))
>>> numbers2 = [[1, 2, 3, 4], [5, 4, 5]]
>>> print(getsizeof(numbers1))
36
>>> print(getsizeof(numbers2))
44

    

5. Кортежи поддерживают конкатенацию + и повторение * n:

        >>> num1 = (1, 2, 3)
>>> num2 = (4, 5, 6)
>>> print(num1 + num2)
(1, 2, 3, 4, 5, 6)
>>> print(num1 * 3)
(1, 2, 3, 1, 2, 3, 1, 2, 3)

    

6. Элементы tuple можно использовать в качестве значений переменных; этот прием называют распаковкой кортежа:

        >>> seasons = ('весна', 'лето', 'осень', 'зима')
>>> s1, s2, s3, s4 = seasons
>>> print(s1, s3)
весна осень

    

Создание tuple в Питоне

Пустой кортеж можно создать двумя способами – с помощью круглых скобок () и с использованием функции tuple():

        my_tuple = ()
my_tuple2 = tuple()

    

При создании кортежа с одним элементом после этого элемента необходимо ставить запятую, иначе Python не определяет конструкцию как кортеж:

        >>> my_tuple = (5)
>>> print(type(my_tuple))
<class 'int'>
>>> my_tuple = (5,)
>>> print(type(my_tuple))
<class 'tuple'>

    

Создать кортеж с несколькими элементами можно следующими способами.

Способ 1: Перечисление элементов

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

        info = ('Егор', 'разработчик', 350000, 28)
    

Элементы кортежа необязательно перечислять в круглых скобках – когда Python получает более одного значения для переменной, создание («упаковка») кортежа происходит автоматически:

        >>> letters = 'a', 'b', 'c', 'd'
>>> print(letters)
('a', 'b', 'c', 'd')

    

Способ 2: Преобразование других типов данных

С помощью встроенной функции tuple() можно создать кортеж из списка, строки или множества:

        >>> my_lst = [4, 6, 2, 8]
>>> print(tuple(my_lst))
(4, 6, 2, 8)
>>> my_str = 'Я изучаю Python'
>>> print(tuple(my_str))
('Я', ' ', 'и', 'з', 'у', 'ч', 'а', 'ю', ' ', 'P', 'y', 't', 'h', 'o', 'n')
>>> my_set = {2, 5, 6, 7}
>>> print(tuple(my_set))
(2, 5, 6, 7)

    

Однако при подобном преобразовании словаря в кортеж останутся только ключи:

        >>> my_dict = {'яблоки': 52, 'апельсины': 35}
>>> print(tuple(my_dict))
('яблоки', 'апельсины')

    

Число напрямую преобразовать в кортеж нельзя:

        >>> num = 178394
>>> print(tuple(num))
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
TypeError: 'int' object is not iterable

    

Но если конвертировать число в строку, преобразование пройдет без ошибок:

        >>> num = 31232534
>>> print(tuple(str(num)))
('3', '1', '2', '3', '2', '5', '3', '4')

    

В ходе преобразования строки в кортеж с помощью одной лишь функции tuple() строка разбивается на отдельные символы. Если нужно разбить строку по одному разделителю, подойдет метод partition():

        >>> st = 'Я изучаю***Python'
>>> print(st.partition('***'))
('Я изучаю', '***', 'Python')

    

Чтобы разбить строку по всем разделителям, вместе с tuple() используют split():

        >>> st = tuple(input().split())
Код на языке Python
>>> print(st)
('Код', 'на', 'языке', 'Python')
    

Способ 3: Генератор кортежей

Генераторы кортежей, в отличие от списков и словарей, не слишком удобно использовать для решения практических задач:

        >>> my_tuple = (i for i in range(5))
>>> print(my_tuple)
<generator object <genexpr> at 0x023B5830>

    

Но если генератор кортежа все-таки необходимо использовать, это можно сделать двумя способами:

1. Распаковать сгенерированный объект при выводе:

        >>> numbers = (i for i in range(10))
>>> print(*numbers)
0 1 2 3 4 5 6 7 8 9

    

2. Либо использовать в генераторе функцию tuple():

        >>> my_tuple = tuple(i ** 2 for i in range(1, 12, 2))
>>> print(my_tuple)
(1, 9, 25, 49, 81, 121)

    

Способ 4: Распаковка строк и списков

Оператор распаковки * и запятая после имени переменной автоматически превращают строки и списки в кортежи:

        >>> st = 'Я изучаю Python'
>>> sp = ['Python', 'HTML5', 'CSS', 'JavaScript']
>>> tuple1 = (*st,)
>>> tuple2 = (*sp,)
>>> print(tuple1)
('Я', ' ', 'и', 'з', 'у', 'ч', 'а', 'ю', ' ', 'P', 'y', 't', 'h', 'o', 'n')
>>> print(tuple2)
('Python', 'HTML5', 'CSS', 'JavaScript')

    

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

        >>> my_tuple = (4, 5, 6)
>>> del my_tuple[1]
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion
>>> my_tuple[2] = 9
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

    

Индексация и срезы

Индексация и срезы в кортежах работают так же, как и в списках:

        >>> my_tuple = ('банан', 'груша', 'манго')
>>> print(my_tuple[0], my_tuple[-1])
банан манго
>>> print(my_tuple[1:])
('груша', 'манго')
>>> print(my_tuple[::-1])
('манго', 'груша', 'банан')

    

Для возвращения индексa элемента используется index():

        >>> nutr = ('белки', 'жиры', 'углеводы')
>>> print(nutr.index('белки'))
0

    

Длина, сумма, минимальный и максимальный элементы

Эти методы тоже аналогичны списочным:

        >>> my_tuple = ('карандаш', 'ручка', 'шар')
>>> print(len(my_tuple))
3
>>> print(min(my_tuple, key=len))
шар
>>> print(max(my_tuple, key=len))
карандаш
>>> nums = (4, 5, 2, 1, 6)
>>> print(sum(nums))
18

    

Принадлежность

С помощью операторов in и not in можно убедиться в наличии (отсутствии) определенного значения в кортеже:

        >>> nums = (1, 3, 5, 6, 7, 8)
>>> (5 in nums)
True
>>> (25 not in nums)
True

    

Подсчет элементов

Для подсчета числа вхождений какого-либо значения в кортеже используется count():

        >>> cities = ('Москва', 'Ростов', 'Москва', 'Рязань', 'Саратов', 'Москва')
>>> print(cities.count('Москва'))
3

    

Сортировка

Кортежи поддерживают сортировку, однако результатом будет список:

        >>> nums = (4, 1, 7, 2, 0, 9, 5)
>>> print(sorted(nums))
[0, 1, 2, 4, 5, 7, 9]

    

Если результат должен сохраняться в виде кортежа, нужно использовать tuple():

        >>> nums = (4, 1, 7, 2, 0, 9, 5)
>>> print(tuple(sorted(nums, reverse=True)))
(9, 7, 5, 4, 2, 1, 0)

    

Преобразование кортежей в другие типы данных

Кортеж можно преобразовать в строку:

        >>> letters = ('P', 'y', 't', 'h', 'o', 'n')
>>> print('*'.join(letters))
P*y*t*h*o*n

    

В список:

        >>> sp = (2, 7, 5, 8, 1)
>>> print(list(sp))
[2, 7, 5, 8, 1]

    

В словарь (если кортеж вложенный и состоит из пар значений):

        >>> info = (('фрукты', 5), ('овощи', 15), ('конфеты', 3))
>>> print(dict(info))
{'фрукты': 5, 'овощи': 15, 'конфеты': 3}

    

Во множество:

        >>> numbers = (3, 2, 1, 6, 7, 2, 2, 9)
>>> print(set(numbers))
{1, 2, 3, 6, 7, 9}

    

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

Как и списки, кортежи с однородными данными можно сравнивать между собой с помощью операторов >, >=, <, <=, ==, !=. Если элементы кортежей принадлежат к разным типам данных, поддерживаются только операторы == и !=.

        >>> tuple1 = (1, 2, 3)
>>> tuple2 = (4, 5, 6)
>>> print(tuple1 < tuple2)
True
>>> print(tuple1 != tuple2)
True

    

Практика

Задание 1

Напишите программу, которая:

  • Создает кортежи из положительных и отрицательных целых чисел на основе полученной от пользователя строки.
  • Выводит количество положительных и отрицательных чисел в этих кортежах.

Пример ввода:

        45 -6 -9 43 23 5 2 -9 -1 6 3
    

Вывод:

        Кортеж (45, 43, 23, 5, 2, 6, 3) состоит из 7 положительных чисел
Кортеж (-6, -9, -9, -1) состоит из 4 положительных чисел

    

Решение:

        numbers = tuple(map(int, input().split()))
pos = tuple(i for i in numbers if i > 0)
neg = tuple(i for i in numbers if i < 0)
print(f'Кортеж {pos} состоит из {len(pos)} положительных чисел')
print(f'Кортеж {neg} состоит из {len(neg)} положительных чисел')

    

Задание 2

Напишите программу, которая:

  • Создает кортеж из полученной от пользователя строки, состоящей из вещественных чисел, разделенных пробелами.
  • Выводит минимальный и максимальный элементы кортежа, а также их сумму.

Пример ввода:

        3.45 6.78 8.99 1.45 4.32 19.04 0.55
    

Вывод:

        Минимальное число: 0.55
Максимальное число: 19.04
Сумма min и max: 19.59

    

Решение:

        my_tuple = tuple(map(float, input().split()))
print(f'Минимальное число: {min(my_tuple)}')
print(f'Максимальное число: {max(my_tuple)}')
print(f'Сумма min и max: {((min(my_tuple) + max(my_tuple))):.2f}')

    

Задание 3

Имеется кортеж списков, в которых перечислены названия фруктов и калорийность:

        fruit = (['яблоки', 46], ['персики', 49], ['лимоны', 36], ['виноград', 190])
    

Калорийность винограда указана ошибочно. Напишите программу, которая исправит калорийность на 75, и добавит в третий элемент кортежа новое значение ['айва', 42]. Результат должен выглядеть так:

        fruit = (['яблоки', 46], ['персики', 49], ['лимоны', 36, 'айва', 42], ['виноград', 75])
    

Решение:

        fruit = (['яблоки', 46], ['персики', 49], ['лимоны', 36], ['виноград', 190])
fruit[3][1] = 75
fruit[2].extend(['айва', 42])
print(fruit)

    

Задание 4

Имеется вложенный кортеж:

        numbers = ((5, 4, 5, 4), (3, 3, 4, 6), (8, 9, 5, 4), (12, 4, 5, 1), (9, 3, 5, 1))
    

Напишите программу, которая формирует новый кортеж, состоящий из средних арифметических значений элементов numbers. Результат выводится в следующем виде:

        4.5 4.0 6.5 5.5 4.5
    

Решение:

        numbers = ((5, 4, 5, 4), (3, 3, 4, 6), (8, 9, 5, 4), (12, 4, 5, 1), (9, 3, 5, 1))
avg = tuple(sum(i)/len(i) for i in numbers)
print(*avg)

    

Задание 5

Имеется вложенный кортеж:

        nested_tuple = ((12, 3, 1), (5, 11), (15, 7, 8, 9), (10, 6, 4))
    

Напишите программу для преобразования nested_tuple в обычный кортеж, упорядоченный по возрастанию:

        (1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15)
    

Решение:

        nested_tuple = ((12, 3, 1), (5, 11), (15, 7, 8, 9), (10, 6, 4))
res = []
flat_list = [res.extend(i) for i in nested_tuple]
print(tuple(sorted(res)))

    

Задание 6

Напишите программу для сортировки вложенного кортежа по третьему элементу. Исходный кортеж:

        (('красный', 33, 55), ('зеленый', 17, 44), ('синий', 12, 3), ('черный', 2, 5))
    

Результат:

        (('черный', 2, 5), ('синий', 12, 3), ('зеленый', 17, 44), ('красный', 33, 55))
    

В качестве ключа сортировки следует использовать конструкцию key=lambda x: x[2] – это анонимная функция. В последующих статьях мы будем подробно разбирать применение анонимных функций.

Решение:

        nested_tuple = (('красный', 33, 55), ('зеленый', 17, 44), ('синий', 12, 3), ('черный', 2, 5))
nested_tuple = tuple(sorted(list(nested_tuple), key=lambda x: x[2]))
print(nested_tuple)

    

Задание 7

Напишите программу, которая:

  • принимает на вход строку, состоящую из цифр или символов, разделенных пробелами;
  • создает из строки кортеж;
  • проверяет, состоит ли кортеж из одинаковых элементов;
  • выводит True или False в зависимости от результатов проверки.

Для проверки соответствия всех элементов одному условию в Python используется встроенная функция all():

        all(i == my_tuple[0] for i in my_tuple)
    

Пример ввода:

        35 35 35 35 35
    

Вывод:

        True
    

Решение:

        my_tuple = tuple(input().split())
print(all(i == my_tuple[0] for i in my_tuple))

    

Задание 8

Напишите программу, которая на основе исходного кортежа создает новый кортеж, из которого исключены все пользователи с номерами телефонов с региональным кодом +56.

Исходный кортеж:

        info = (('Евгений Романов', 25, '+56(983)354-67-21'),
    	('Марина Дятлова', 22, '+56(190)251-45-79'),
    	('Кирилл Кудрявцев', 34, '+7(890)456-12-42'),
    	('Сергей Дятлов', 24, '+56(190)156-42-99'),
    	('Юлия Степанова', 21, '+16(398)355-33-09'),
    	('Тимофей Иванов', 34, '+7(918)222-52-77'))
    

Ожидаемый результат:

        (('Кирилл Кудрявцев', 34, '+7(890)456-12-42'), ('Юлия Степанова', 21, '+16(398)355-33-09'), ('Тимофей Иванов', 34, '+7(918)222-52-77'))
    

Решение:

        info = (('Евгений Романов', 25, '+56(983)354-67-21'),
    	('Марина Дятлова', 22, '+56(190)251-45-79'),
    	('Кирилл Кудрявцев', 34, '+7(890)456-12-42'),
    	('Сергей Дятлов', 24, '+56(190)156-42-99'),
    	('Юлия Степанова', 21, '+16(398)355-33-09'),
    	('Тимофей Иванов', 34, '+7(918)222-52-77'))
new_info = tuple([i for i in info if not i[2].startswith('+56')])
print(new_info)

    

Задание 9

Имеется кортеж списков:

        numbers = ([4, 5], [4, 5], [1, 6], [7, 3], [3, 3], [2, 4], [9, 5], [1, 1])
    

Напишите программу, которая добавит цифру 5 в конец каждого списка.

Ожидаемый результат:

        numbers = ([4, 5, 5], [4, 5, 5], [1, 6, 5], [7, 3, 5], [3, 3, 5], [2, 4, 5], [9, 5, 5], [1, 1, 5])
    

Решение:

        numbers = ([4, 5], [4, 5], [1, 6], [7, 3], [3, 3], [2, 4], [9, 5], [1, 1])
add = [i.extend([5]) for i in numbers]
print(numbers)

    

Задание 10

Напишите программу, которая:

  • получает на вход целое число n – количество точек на плоскости;
  • получает n строк с координатами x, y;
  • определяет точку, наиболее удаленную от начала координат.

Пример ввода:

        5
4 8
1 2
7 4
7 8
3 2

    

Вывод:

        7 8
    

Решение:

        n = int(input())
points = [tuple(map(int, input().split())) for i in range(n)]
mx = max(points, key=lambda x: x[0] ** 2 + x[1] ** 2)
print(*mx)

    

Подведем итоги

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

Содержание самоучителя

  1. Особенности, сферы применения, установка, онлайн IDE
  2. Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
  3. Типы данных: преобразование и базовые операции
  4. Методы работы со строками
  5. Методы работы со списками и списковыми включениями
  6. Методы работы со словарями и генераторами словарей
  7. Методы работы с кортежами
  8. Методы работы со множествами
  9. Особенности цикла for
  10. Условный цикл while
  11. Функции с позиционными и именованными аргументами
  12. Анонимные функции
  13. Рекурсивные функции
  14. Функции высшего порядка, замыкания и декораторы
  15. Методы работы с файлами и файловой системой

Содержание:развернуть

  • Примеры кортежей
  • Зачем использовать кортеж вместо списка?
  • Работа с кортежами
  • Создание

  • Упаковка

  • Распаковка

  • Обращение к элементу и поиск в кортеже

  • Сравнение

  • Перебор

  • Сортировка

  • Удаление

  • Методы и особые операции
  • Срез

  • Длина кортежа

  • Конкатенация

  • Повторение

  • Индекс заданного элемента

  • Число вхождений элемента

  • Преобразование
  • tuple → str

  • tuple → list

  • tuple → dict

  • Именованные кортежи
  • Tuple index out of range

Кортеж (tuple) — ещё один вид последовательностей в Python.

По своей природе они очень схожи со списками, но, в отличие от последних, являются неизменяемыми.

# кортеж
immutable_tuple = (4, 5, 6)
immutable_tuple[0] = 404

>
Traceback (most recent call last):
immutable_tuple[0] = 404
TypeError: 'tuple' object does not support item assignment
# список
mutable_list = [7, 8, 9]
mutable_list[0] = 1
print(mutable_list)

> [1, 8, 9]

Как видно, в литеральной форме кортеж python 3 записывается в виде последовательности элементов в круглых скобках, в то время как для списков характерны квадратные.

👉 Некоторые особенности кортежей:

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

x = 100
y = 200
x, y = y, x

print(x)
> 200

print(y)
> 100

Примеры кортежей

# пустой кортеж
empty_tuple = ()

# кортеж из 4-х элементов разных типов
four_el_tuple = (36.6, 'Normal', None, False)

# пример tuple, что содержит вложенные элементы
nested_elem_tuple = (('one', 'two'), ['three', 'four'], {'five': 'six'}, (('seven', 'eight'), ('nine', 'ten')))
print(nested_elem_tuple)

> (('one', 'two'), ['three', 'four'], {'five': 'six'}, (('seven', 'eight'), ('nine', 'ten')))

Зачем использовать кортеж вместо списка?

Тем, кто уже успел познакомиться со списками в Python, может показаться не очевидным смысл использования кортежей. Ведь фактически, списки могут делать всё то же самое и даже больше. Это вполне естественный вопрос, но, разумеется, у создателей языка найдётся на него ответ:

  • Неизменяемость — именно это свойство кортежей, порой, может выгодно отличать их от списков.
  • Скорость — кортежи быстрее работают. По причине неизменяемости кортежи хранятся в памяти особым образом, поэтому операции с их элементами выполняются заведомо быстрее, чем с компонентами списка.
  • Безопасность — неизменяемость также позволяет им быть идеальными кандидатами на роль констант. Константы, заданные кортежами, позволяют сделать код более читаемым и безопасным.
  • Использование tuple в других структурах данных — кортежи применимы в отдельных структурах данных, от которых python требует неизменяемых значений. Например ключи словарей (dicts) должны состоять исключительно из данных immutable-типа.

💡 Кроме того, кортежи удобно использовать, когда необходимо вернуть из функции несколько значений:

def get_status(service_name):
return None, f"service {service_name} is OK!"

print(type(get_status('nginx')))
> <class 'tuple'>

error, message = get_status('nginx')
print(error)
print(message)
> None
> service nginx is OK!

Работа с кортежами

Создание

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

Способ №1: Литеральное объявление:

literal_creation = ('any', 'object')

print(literal_creation)
> ('any', 'object')

print(type(literal_creation))
> <class 'tuple'>

Способ №2: Через функцию tuple():

tuple_creation = tuple('any iterable object')

print(tuple_creation)
> ('a', 'n', 'y', ' ', 'i', 't', 'e', 'r', 'a', 'b', 'l', 'e', ' ', 'o', 'b', 'j', 'e', 'c', 't')

print(type(tuple_creation))
> <class 'tuple'>

💁‍♀️ Важно, чтобы аргумент, передаваемый в tuple() был итерируемым объектом:

incorrect_creation = tuple(777)

>
Traceback (most recent call last):
incorrect_creation = tuple(777)
TypeError: 'int' object is not iterable

Упаковка

Упаковкой кортежа называют присваивание его какой-то переменной, что, по сути, совпадает с операцией объявления.

Стоит обратить внимание 2 момента:

  1. Выражения some_tuple = (11, 12, 13) и some_tuple = 11, 12, 13 тождественны.
  2. Для объявления кортежа, включающего один единственный элемент, нужно использовать завершающую запятую:

is_tuple = ('a',)
is_tuple_too = 'b',
not_a_tuple = 'c'

print(type(is_tuple))
print(type(is_tuple_too))
print(type(not_a_tuple))

> <class 'tuple'>
> <class 'tuple'>
> <class 'str'>

Распаковка

Обратная операция, смысл которой в том, чтобы присвоить значения элементов кортежа отдельным переменным.

notes = ('Do', 'Re', 'Mi', 'Fa', 'Sol', 'La', 'Si')
do, re, mi, fa, sol, la, si = notes
print(mi)

> Mi

Количество переменных должно совпадать с числом элементов tuple

Однако, если необходимо получить лишь какие-то отдельные значения, то в качестве «ненужных» переменных позволено использовать символ нижнего подчеркивания «_«:

night_sky = 'Moon', 'Stars'
moon, _ = night_sky
print(moon)

> Moon

Обращение к элементу и поиск в кортеже

Обратиться к элементу кортежа можно по номеру его позиции. Причём как с начала, так и с конца:

# Mike - [0], Leo - [1], Don - [2], Raph - [3]
turtles = ('Mike', 'Leo', 'Don', 'Raph')
# Mike - [-4], Leo - [-3], Don - [-2], Raph - [-1]

print(turtles[1])
print(turtles[-2])
print(turtles[2] == turtles[-2])
> Leo
> Don
> True

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

input_box = ('firstbox', (15, 150))
# помним про индексацию, ведущую своё начало с 0
print(input_box[1][1])

> 150

Узнать, присутствует ли объект среди элементов кортежа, можно с помощью оператора in:

song = ('Roses', 'are', 'Red')
print('Red' in song)
print('Violet' in song)

> True
> False

Сравнение

tuple_A = 2 * 2,
tuple_B = 2 * 2 * 2,
tuple_C = 'a',
tuple_D = 'z',
tuple_E = (42, 'maximum')
tuple_F = (42, 'minimum')
tuple_Z = 999,

# при сравнении кортежей, числа сравниваются по значению
print(tuple_A < tuple_B)

> True

# строки в лексикографическом порядке
print(tuple_C < tuple_D)

> True

# при равенстве элементов на одинаковых позициях, сравниваются элементы на следующих
print(tuple_E < tuple_F)

> True

# сравнение элементов продолжается до первого неравенства
print(tuple_Z < tuple_F)

> False

Перебор

Наиболее простым и очевидным способом перебрать элементы кортежа является обход его в цикле for:

my_tuple = ('Wise', 'men', 'say', 'only', 'fools', 'rush', 'in')

# Вывести все элементы кортежа
for word in my_tuple:
print(word)
>
Wise
men
say
only
fools
rush
in

Сортировка

Нет ничего проще, чем отсортировать готовый кортеж. В этом наш друг и помощник — прекрасная функция sorted():

not_sorted_tuple = (10**5, 10**2, 10**1, 10**4, 10**0, 10**3)
print(not_sorted_tuple)

> (100000, 100, 10, 10000, 1, 1000)

sorted_tuple = tuple(sorted(not_sorted_tuple))
print(sorted_tuple)

> (1, 10, 100, 1000, 10000, 100000)

Удаление

Добавить или удалить элемент содержащийся в tuple нельзя, по причине всё той же неизменяемости. Однако сам кортеж стереть с цифрового лица Земли возможно. Оператор del к нашим услугам:

some_useless_stuff = ('sad', 'bad things', 'trans fats')
del some_useless_stuff
print(some_useless_stuff)

>
Traceback (most recent call last):
print(some_useless_stuff)
NameError: name 'some_useless_stuff' is not defined

Методы и особые операции

Срез

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

tuple[start:fin:step]

Где start — начальный элемент среза (включительно), fin — конечный (не включительно) и step— «шаг» среза.

float_tuple = (1.1, 0.5, 45.5, 33.33, 9.12, 3.14, 2.73)
print(float_tuple[0:3])

> (1.1, 0.5, 45.5)

# тождественная запись
print(float_tuple[:3])

> (1.1, 0.5, 45.5)

# если не указывать конечное значение, будут выведены все элементы до конца
print(float_tuple[0:])

> (1.1, 0.5, 45.5, 33.33, 9.12, 3.14, 2.73)

# не указывать начальное - с начала
print(float_tuple[:])

> (1.1, 0.5, 45.5, 33.33, 9.12, 3.14, 2.73)

# выведем элементы с шагом 2
print(float_tuple[-7::2])

> (1.1, 45.5, 9.12, 2.73)

# отрицательный шаг позволит вывести tuple в обратном порядке
print(float_tuple[::-1])

> (2.73, 3.14, 9.12, 33.33, 45.5, 0.5, 1.1)

Длина кортежа

Используя функцию len(), получаем длину/количество элементов:

php = ('p', 'h', 'p')
print(len(php))

> 3

Конкатенация

Для tuple определена операция конкатенации:

storm_1 = ('Lightning')Union = (' and ')
storm_2 = ('Thunder')

print(storm_1 + Union + storm_2)

> Lightning and Thunder

Повторение

Как и в случае с конкатенацией, для кортежей, впрочем, как и для строк, определена операция повторения:

dog_do = ('woof!',)
print(dog_do * 3)
> ('woof!', 'woof!', 'woof!')

Индекс заданного элемента

Метод index() позволяет получить индекс элемента. Достаточно передать нужное значение элемента, как аргумент метода:

rom = ('I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X')
print(rom.index('X'))

> 9

Число вхождений элемента

Метод count() ведёт подсчет числа вхождений элемента в кортеж.

AT = ('Finn', 'Jake', 'BiMo', 'Marceline', 'Princess Bubblegum', 'BiMo')
print(AT.count('Finn'))

> 1

print(AT.count('BiMo'))

> 2

Преобразование

tuple → str

Представляем вашему вниманию лёгкий способ преобразовать кортеж в строку при помощи метода join():

game_name = ('Breath', ' ', 'of', ' ', 'the', ' ', 'Wild')
game_name = ''.join(game_name)
print(game_name)

> Breath of the Wild

tuple → list

Тут всё ещё проще. Для такой конвертации необходимо всего лишь передать кортеж, как аргумент функции list():

dig_tuple = (1111, 2222, 3333)
print(dig_tuple)

> (1111, 2222, 3333)

dig_list = list(dig_tuple)
print(dig_list)

> [1111, 2222, 3333]

tuple → dict

А вот для преобразования кортежа в словарь придётся применить небольшую хитрость, а именно — генератор словарей:

score = (('Eric', 65000), ('Stephany', 87000))
score_dict = dict((x, y) for x, y in score)
print(score_dict)

> {'Eric': 65000, 'Stephany': 87000}

Именованные кортежи

Мощная особенность и настоящая гордость языка.

Именованный кортеж (или named tuple) позволяет программисту обращаться к элементу кортежа не по индексу, а через удобочитаемый заранее заданный идентификатор.

Покажем на примере:

# для начала импортируем сам модуль
from collections import namedtuple

citizen = namedtuple("Citizen", "name age status")
Alex = citizen(name='Alex Mercer', age=27, status='show businessman')
print(Alex.name)

> Alex Mercer

print(Alex.status)

> show businessman

Точечная нотация при обращении к свойству объекта может вызвать невольную ассоциацию с классами. В общем-то одно из применений namedtuple как раз связано с ситуациями, когда нужно передать несколько свойств объекта одним куском.

Tuple index out of range

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

i_initiate_error = ('west', 'north', 'east', 'south')
print(i_initiate_error[4])

Причина её возникновения в том, что нельзя получить доступ к индексу кортежа за пределами его длины. Эта ошибка может возникать и при совсем нетривиальных обстоятельствах, однако суть её останется прежней. Начинающим программистам стоит помнить, что индексация кортежей начинается с 0, а не с 1.


Кортежи весьма похожи на списки, но очень сложно спорить с тем, что гибкость и функционал последних намного выше. Поэтому, при написании программ, следует, в основном, пользоваться ими, а не кортежами.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как изменить корпус флешки
  • Как изменить контраст экрана на виндовс 7
  • Как изменить корпус ноутбука
  • Как изменить контраст печати
  • Как изменить корпоративный тариф мегафон

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии