Khi cần nối các tuple thành nested tuple (tuple chứa các tuple), toán tử + có thể sử dụng.
Tuple là kiểu dữ liệu bất biến (immutable). Toán tử + tạo tuple mới chứa các phần tử từ các tuple gốc.
Ví dụ
# Lưu ý: dấu phẩy sau tuple tạo tuple đơn phần tử chứa tuple đó
tuple_1 = (7, 8, 3, 4, 3, 2), # -> ((7, 8, 3, 4, 3, 2),)
tuple_2 = (9, 6, 8, 2, 1, 4), # -> ((9, 6, 8, 2, 1, 4),)
print(f"Tuple 1: {tuple_1}")
print(f"Tuple 2: {tuple_2}")
print(f"Kiểu tuple_1: {type(tuple_1)}") # tuple chứa 1 tuple
# Nối bằng toán tử +
result = tuple_1 + tuple_2
print(f"\nKết quả nối: {result}")
print(f"Kiểu kết quả: {type(result)}")
print(f"Độ dài: {len(result)}")
Kết quả
Tuple 1: ((7, 8, 3, 4, 3, 2),) Tuple 2: ((9, 6, 8, 2, 1, 4),) Kiểu tuple_1: <class 'tuple'> Kết quả nối: ((7, 8, 3, 4, 3, 2), (9, 6, 8, 2, 1, 4)) Kiểu kết quả: <class 'tuple'> Độ dài: 2
Giải thích
tuple_1 = (7, 8, 3, 4, 3, 2),-> dấu phẩy cuối tạo tuple chứa 1 phần tử là tuple(7, 8, 3, 4, 3, 2). Tức là((7, 8, 3, 4, 3, 2),).- Tương tự
tuple_2. tuple_1 + tuple_2nối hai tuple đơn phần tử -> tuple 2 phần tử, mỗi phần tử là một tuple con.- Kết quả là nested tuple (tuple của tuple).
Nối tuple phẳng (không nested)
# Nếu không muốn nested, bỏ dấu phẩy đơn t1 = (7, 8, 3, 4, 3, 2) t2 = (9, 6, 8, 2, 1, 4) flat_result = t1 + t2 print(flat_result) # (7, 8, 3, 4, 3, 2, 9, 6, 8, 2, 1, 4)
Nối nhiều tuple thành nested
t1 = (1, 2) t2 = (3, 4) t3 = (5, 6) # Tạo nested tuple: mỗi tuple con là một phần tử nested = (t1, t2, t3) print(nested) # ((1, 2), (3, 4), (5, 6)) # Hoặc dùng + với tuple đơn phần tử nested2 = (t1,) + (t2,) + (t3,) print(nested2) # ((1, 2), (3, 4), (5, 6))
Unpacking để nối (Python 3.5+)
# Nối phẳng flat = (*t1, *t2, *t3) print(flat) # (1, 2, 3, 4, 5, 6) # Nối nested nested = (*( (t1,), (t2,), (t3,) )) print(nested) # ((1, 2), (3, 4), (5, 6))
Ứng dụng: Gom nhóm dữ liệu
# Các bản ghi riêng lẻ
record1 = ('John', 25, 'Engineer')
record2 = ('Jane', 30, 'Designer')
record3 = ('Bob', 35, 'Manager')
# Gom thành nested tuple (database record style)
database = (record1, record2, record3)
print(database)
# (('John', 25, 'Engineer'), ('Jane', 30, 'Designer'), ('Bob', 35, 'Manager'))
# Truy cập
print(database[0]) # ('John', 25, 'Engineer')
print(database[1][1]) # 30 (tuổi Jane)