W3docs

Объединение кортежей в Python

Все способы объединения кортежей Python: оператор + (конкатенация), оператор * (повторение) и конструктор tuple() с примерами.

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

На этой странице рассмотрены основные способы объединения кортежей в Python:

  • Оператор + — конкатенация двух или более кортежей
  • Оператор * — повторение кортежа заданное количество раз
  • Конструктор tuple() — создание кортежа из любого итерируемого объекта, полезно при объединении последовательностей других типов

Объединение кортежей с помощью оператора +

Оператор + конкатенирует два кортежа в один новый кортеж. Элементы левого операнда идут первыми, за ними следуют элементы правого операнда. Ни один из исходных кортежей при этом не изменяется.

python— editable, runs on the server

Вывод:

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

Объединение трёх и более кортежей

Используйте цепочку операторов + для объединения любого количества кортежей в одном выражении:

python— editable, runs on the server

Вывод:

(1, 2, 3, 4, 5, 6, 7, 8, 9)

Объединение кортежей с разными типами данных

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

t1 = (1, "hello", True)
t2 = (3.14, None)
result = t1 + t2
print(result)

Вывод:

(1, 'hello', True, 3.14, None)

Ограничение: оба операнда должны быть кортежами

Нельзя использовать + для конкатенации кортежа со списком или любым другим типом — Python выбросит TypeError. Предварительно преобразуйте другую последовательность в кортеж:

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

# This raises TypeError:
# result = my_tuple + my_list

# Correct — convert the list to a tuple first:
result = my_tuple + tuple(my_list)
print(result)

Вывод:

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

Ограничение: синтаксис кортежа из одного элемента

Кортеж с одним элементом требует завершающей запятой. Без неё Python воспринимает скобки как группирующие, а не как литерал кортежа:

not_a_tuple = (42)    # int, not tuple
singleton   = (42,)   # tuple with one element

result = singleton + (1, 2)
print(result)

Вывод:

(42, 1, 2)

Повторение кортежа с помощью оператора *

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

t = ("a", "b")
result = t * 3
print(result)

Вывод:

('a', 'b', 'a', 'b', 'a', 'b')

Целое число может располагаться с любой стороны: t * 3 и 3 * t дают одинаковый результат. Умножение на 0 или отрицательное число возвращает пустой кортеж.

t = (1, 2, 3)
print(t * 0)   # ()
print(t * 1)   # (1, 2, 3)

Вывод:

()
(1, 2, 3)

Создание объединённого кортежа с помощью tuple()

Встроенный конструктор tuple() преобразует любой итерируемый объект в кортеж. Его можно использовать для создания объединённого кортежа из списка, собранного путём добавления элементов — это эффективнее, чем повторные вызовы + внутри цикла.

parts = [1, 2, 3]
parts += [4, 5, 6]        # build up a list first
combined = tuple(parts)   # convert to tuple once
print(combined)

Вывод:

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

Почему следует избегать + внутри цикла

Каждый вызов + создаёт новый объект-кортеж и копирует все элементы. При объединении многих кортежей это означает O(n²) копирований. Эффективный подход — собирать все элементы в список и преобразовать его один раз в конце:

tuples = [(1, 2), (3, 4), (5, 6), (7, 8)]

# Inefficient — creates a new tuple on each iteration
result = ()
for t in tuples:
    result = result + t   # many intermediate copies

# Efficient — build a list, convert once
result = tuple(item for t in tuples for item in t)
print(result)

Вывод:

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

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

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

t1 = (1, 2)
t2 = (3, 4)

joined = t1 + t2      # flat: all four elements at the same level
nested = (t1, t2)     # two-element tuple of tuples

print("joined:", joined)
print("nested:", nested)

Вывод:

joined: (1, 2, 3, 4)
nested: ((1, 2), (3, 4))

Используйте +, когда нужен плоский результат. Используйте (t1, t2), когда намеренно хотите получить кортеж кортежей (например, таблицу строк).

Выбор подходящего способа

ЗадачаПодход
Объединить два или три кортежа в одинtuple1 + tuple2
Эффективно объединить много кортежейСобрать список, затем tuple(...)
Повторить шаблон N разmy_tuple * N
Преобразовать список в кортежtuple(my_list)

Связанные темы

  • Python Tuples — создание, индексирование и срезы кортежей
  • Access Tuples — индексирование и срезы элементов кортежа
  • Update Tuples — способы изменения неизменяемых кортежей
  • Unpack Tuples — присваивание элементов кортежа переменным
  • Loop Tuples — перебор элементов кортежа
  • Tuple Methods — справочник методов count() и index()
  • Join Lists — объединение списков с помощью +, extend() и других способов

Практика

Практика
Which operator concatenates two tuples into a new tuple in Python?
Which operator concatenates two tuples into a new tuple in Python?
Was this page helpful?