Кортежи в Python: способы создания и практические примеры
Основные способы создания кортежей
Наиболее часто используемый способ создания кортежа - заключить последовательность элементов в круглые скобки, разделив их запятыми. Этот синтаксис интуитивно понятен и применяется в подавляющем большинстве случаев.
coordinates = (55.7558, 37.6173)
print(coordinates) # (55.7558, 37.6173)
print(type(coordinates)) # добавить в кортеж python (добавление элемента в кортеж в python)
Элементы могут быть любого типа, в том числе вложенные кортежи:
nested = (1, 'a', (3, 4))
print(nested) # (1, 'a', (3, 4))элементы кортежа python (элементы кортежа в python)
Как создать кортеж без круглых скобок?
Кортеж можно создать, просто перечислив элементы через запятую, не используя скобки. Скобки необязательны, за исключением пустого кортежа или случаев, когда требуется однозначно выделить кортеж в выражении.
t = 1, 2, 3
print(t) # (1, 2, 3)
print(type(t)) #
создание кортежей python (создание кортежа в python)
Этот приём часто используется при множественном присваивании (распаковке).
Если после элемента поставить запятую, но не заключить в скобки, создастся одноэлементный кортеж. Без запятой это будет просто скаляр:
a = 1, # кортеж (1,)
b = 1 # целое число 1тип tuple python (тип tuple в python)
Типичная ошибка: забыть запятую в одноэлементном кортеже, что приводит к созданию скаляра, а не кортежа.
Как создать пустой кортеж?
Пустой кортеж создаётся с помощью пустых круглых скобок () или конструктора tuple() без аргументов.
empty1 = ()
empty2 = tuple()
print(empty1, empty2) # () ()
print(type(empty1)) #
Нельзя создать пустой кортеж без скобок, просто поставив запятую - это приведёт к синтаксической ошибке или созданию кортежа с одним элементом (если перед запятой есть значение).
Как создать кортеж с одним элементом?
Для одноэлементного кортежа необходимо поставить запятую после единственного элемента. Без запятой круглые скобки воспринимаются как обычные скобки для группировки выражений.
single = (42,)
print(single) # (42,)
print(len(single)) # 1
not_a_tuple = (42)
print(not_a_tuple) # 42 - это целое число, не кортеж
Ошибка: (42) - это число в скобках, а не кортеж. Для кортежа нужна запятая: (42,).
Как создать кортеж из итерабельного объекта с помощью tuple()?
Конструктор tuple(iterable) принимает любой итерабельный объект (список, строку, словарь, range и т.д.) и возвращает кортеж из его элементов.
lst_to_tuple = tuple([1, 2, 3])
str_to_tuple = tuple('hello')
range_to_tuple = tuple(range(5))
print(lst_to_tuple) # (1, 2, 3)
print(str_to_tuple) # ('h', 'e', 'l', 'l', 'o')
print(range_to_tuple) # (0, 1, 2, 3, 4)
Этот способ удобен для преобразования существующей последовательности в неизменяемую форму.
Если передать неитерабельный объект (например, целое число), возникнет ошибка TypeError: 'int' object is not iterable.
Как создать кортеж из строки?
Строка является итерабельной, поэтому её можно передать в tuple(). Каждый символ строки становится отдельным элементом кортежа.
word = 'Python'
chars = tuple(word)
print(chars) # ('P', 'y', 't', 'h', 'o', 'n')
Таким образом можно быстро получить кортеж символов.
Как создать кортеж из генераторного выражения?
Генераторное выражение в круглых скобках (генератор) также является итерабельным. Передав его в tuple(), можно создать кортеж из сгенерированных значений.
squares = tuple(x * x for x in range(5))
print(squares) # (0, 1, 4, 9, 16)
Это альтернатива созданию кортежа через map или list comprehension с последующим преобразованием.
Если генератор уже был частично исчерпан, tuple() вернёт оставшиеся элементы. После создания кортежа генератор теряется.
Как создать кортеж при распаковке последовательности?
Множественное присваивание в Python создаёт кортеж из значений справа. Например, обмен переменных работает благодаря созданию кортежа.
a, b = 10, 20
print(a, b) # 10 20
# Здесь справа создаётся кортеж (10, 20), который распаковывается
Также можно присвоить переменным кортеж, чтобы явно создать его:
pair = (x, y) = (1, 2)
print(pair) # (1, 2)
Этот приём применяется для одновременного присваивания и сохранения кортежа.
Расширенные примеры создания кортежей
# Создание кортежа из ключей словаря
d = {'a': 1, 'b': 2, 'c': 3}
keys_tuple = tuple(d.keys())
print(keys_tuple) # ('a', 'b', 'c')
# Создание кортежа из значений словаря
values_tuple = tuple(d.values())
print(values_tuple) # (1, 2, 3)
# Создание кортежа из пар (ключ, значение)
items_tuple = tuple(d.items())
print(items_tuple) # (('a', 1), ('b', 2), ('c', 3))
('a', 'b', 'c')
(1, 2, 3)
(('a', 1), ('b', 2), ('c', 3))
# Использование map для создания кортежа
numbers = [1, 2, 3, 4]
plus_one = tuple(map(lambda x: x + 1, numbers))
print(plus_one) # (2, 3, 4, 5)
# Использование filter
evens = tuple(filter(lambda x: x % 2 == 0, numbers))
print(evens) # (2, 4)
(2, 3, 4, 5) (2, 4)
# Создание кортежа из zip
names = ['Alice', 'Bob', 'Charlie']
scores = [85, 92, 78]
combined = tuple(zip(names, scores))
print(combined) # (('Alice', 85), ('Bob', 92), ('Charlie', 78))
(('Alice', 85), ('Bob', 92), ('Charlie', 78))
# Кортеж из enumerate
string = 'abc'
enum_tup = tuple(enumerate(string))
print(enum_tup) # ((0, 'a'), (1, 'b'), (2, 'c'))
((0, 'a'), (1, 'b'), (2, 'c'))
# Распаковка с * для создания кортежа
first = (1, 2)
second = (3, 4)
merged = (*first, *second)
print(merged) # (1, 2, 3, 4)
# Из списка с распаковкой
lst = [5, 6, 7]
from_list = (*lst,)
print(from_list) # (5, 6, 7)
(1, 2, 3, 4) (5, 6, 7)
# Кортеж через срез списка
a = [0, 1, 2, 3, 4]
slice_tup = tuple(a[1:4])
print(slice_tup) # (1, 2, 3)
(1, 2, 3)
# Кортеж из bytes (итерабельное)
b = bytes([72, 101, 108, 108, 111])
from_bytes = tuple(b)
print(from_bytes) # (72, 101, 108, 108, 111)
(72, 101, 108, 108, 111)
# Создание кортежа из range с шагом
r = range(10, 0, -2)
tup_range = tuple(r)
print(tup_range) # (10, 8, 6, 4, 2)
(10, 8, 6, 4, 2)
# Кортеж как ключ словаря
d = {}
d[(1, 2)] = 'point'
print(d) # {(1, 2): 'point'}
# Кортеж в множестве
s = set()
s.add( (3, 4) )
print(s) # {(3, 4)}
{(1, 2): 'point'}
{(3, 4)}
# Именованный кортеж (не базовый кортеж, но родственный)
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)
print(p) # Point(x=10, y=20)
print(tuple(p)) # (10, 20) - можно преобразовать в обычный кортеж
Point(x=10, y=20) (10, 20)
# Создание кортежа из генератора с условием
nums = (i for i in range(10) if i % 3 == 0)
nums_tuple = tuple(nums)
print(nums_tuple) # (0, 3, 6, 9)
(0, 3, 6, 9)
# Множественное присваивание с созданием кортежа
a, *b, c = (1, 2, 3, 4, 5)
print(b) # [2, 3, 4] (b - список, но кортеж создаётся справа)
[2, 3, 4]
# Пустой кортеж через tuple() с аргументом-строкой
empty_str_tuple = tuple('')
print(empty_str_tuple) # ()
()