Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

Кортежи в Python: создание, доступ и продвинутые операции

Кортежи в Python

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

Видео: Списки и кортежи в Python

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


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

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

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

# Разные типы кортежей
# Пустой кортеж
my_tuple = ()
print(my_tuple)
# Кортеж с целыми
my_tuple = (1, 2, 3)
print(my_tuple)
# Смешанные типы
my_tuple = (1, "Hello", 3.4)
print(my_tuple)
# Вложенный кортеж
my_tuple = ("mouse", [8, 4, 6], (1, 2, 3))
print(my_tuple)

Вывод

()
(1, 2, 3)
(1, 'Hello', 3.4)
('mouse', [8, 4, 6], (1, 2, 3))

Кортежи можно создавать без скобок — технику называют упаковкой кортежа (tuple packing).

my_tuple = 3, 4.6, "dog"
print(my_tuple)
# Распаковка кортежа
a, b, c = my_tuple
print(a)
print(b)
print(c)

Вывод

(3, 4.6, 'dog')
3
4.6
dog

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

my_tuple = ("hello")
print(type(my_tuple))  # <class 'str'>
# Кортеж из одного элемента
my_tuple = ("hello",)
print(type(my_tuple))  # <class 'tuple'>
# Скобки необязательны
my_tuple = "hello",
print(type(my_tuple))  # <class 'tuple'>

Вывод

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

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

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

1. Индексация

Используйте оператор [] с нулевой базой. Выход за границы вызывает IndexError; нецелочисленный индекс — TypeError.

# Пример индексации
my_tuple = ('p','e','r','m','i','t')
print(my_tuple[0])  # 'p'
print(my_tuple[5])  # 't'
# Вложенная индексация
n_tuple = ("mouse", [8, 4, 6], (1, 2, 3))
print(n_tuple[0][3])  # 's'
print(n_tuple[1][1])  # 4

Вывод

p
t
s
4

2. Отрицательная индексация

Отрицательные индексы отсчитываются от конца: -1 — последний элемент.

# Отрицательная индексация
my_tuple = ('p', 'e', 'r', 'm', 'i', 't')
print(my_tuple[-1])  # 't'
print(my_tuple[-6])  # 'p'

Вывод

t
p

3. Срезы

Используйте синтаксис start:stop для извлечения подкортежей.

# Пример срезов
my_tuple = ('p','r','o','g','r','a','m','i','z')
print(my_tuple[1:4])   # ('r', 'o', 'g')
print(my_tuple[:-7])   # ('p', 'r')
print(my_tuple[7:])    # ('i', 'z')
print(my_tuple[:])     # полный кортеж

Вывод

('r', 'o', 'g')
('p', 'r')
('i', 'z')
('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')
Кортежи в Python: создание, доступ и продвинутые операции

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

Кортежи неизменяемы. Прямое присваивание элементу вызывает TypeError:

# Попытка изменения
my_tuple = (4, 2, 3, [6, 5])
# my_tuple[1] = 9  # TypeError

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

my_tuple[3][0] = 9
print(my_tuple)  # (4, 2, 3, [9, 5])

Кортеж можно переназначить целиком на новое значение:

my_tuple = ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')
print(my_tuple)

Операторы + (конкатенация) и * (повторение) возвращают новый кортеж.

print((1, 2, 3) + (4, 5, 6))  # (1, 2, 3, 4, 5, 6)
print(("Repeat",) * 3)        # ('Repeat', 'Repeat', 'Repeat')

Вывод

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

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

Отдельные элементы удалить нельзя. Весь кортеж можно удалить с del:

my_tuple = ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')
# del my_tuple[3]  # TypeError
del my_tuple
# print(my_tuple)  # NameError

Вывод

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

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

У кортежей только два встроенных метода: count() и index().

my_tuple = ('a', 'p', 'p', 'l', 'e')
print(my_tuple.count('p'))  # 2
print(my_tuple.index('l'))  # 3

Вывод

2
3

Дополнительные операции с кортежами

1. Проверка принадлежности

Проверьте наличие с ключевым словом in.

my_tuple = ('a', 'p', 'p', 'l', 'e')
print('a' in my_tuple)
print('b' in my_tuple)
print('g' not in my_tuple)

Вывод

True
False
True

2. Итерация

Перебор кортежа с for:

for name in ('John', 'Kate'):
    print("Hello", name)

Вывод

Hello John
Hello Kate

3. Преимущества над списками

Python

  1. Освоение типов данных в Python: практическое руководство
  2. Мастерство операторов Python: Полное руководство
  3. Оператор pass в Python: практическое руководство
  4. Аргументы функций в Python: позиционные, именованные и параметры по умолчанию
  5. Словари в Python: создание, манипуляции и продвинутые техники
  6. Итераторы в Python: как они работают и как создать свои
  7. Замыкания в Python: как вложенные функции захватывают переменные
  8. Модуль datetime в Python: практическое руководство по датам, времени и часовым поясам
  9. Обзор Python: высокоуровневый, читаемый, интерактивный и объектно-ориентированный язык
  10. Числа в Python: Неизменяемые числовые типы данных