Khi cần lặp lại một tuple N lần, toán tử * (nhân) có thể sử dụng.
Tuple là kiểu dữ liệu bất biến (immutable): không thể thay đổi phần tử sau khi tạo. Toán tử * trên tuple thực hiện lặp lại nội dung.
Ví dụ
my_tuple = (11, 14, 0)
print(f"Tuple gốc: {my_tuple}")
N = 5
print(f"Số lần lặp N = {N}")
# Nhân tuple: lặp lại N lần
# Lưu ý: (my_tuple,) tạo tuple chứa 1 phần tử là my_tuple
# (my_tuple,) * N -> tuple chứa N bản sao của my_tuple
result = (my_tuple,) * N
print(f"\nTuple sau khi lặp {N} lần:")
print(result)
print(f"Kiểu: {type(result)}")
print(f"Độ dài: {len(result)}")
Kết quả
Tuple gốc: (11, 14, 0) Số lần lặp N = 5 Tuple sau khi lặp 5 lần: ((11, 14, 0), (11, 14, 0), (11, 14, 0), (11, 14, 0), (11, 14, 0)) Kiểu: <class 'tuple'> Độ dài: 5
Giải thích
(my_tuple,)tạo tuple đơn phần tử chứamy_tuple(cần dấu phẩy).(my_tuple,) * Nlặp tuple đơn phần tử N lần -> tuple N phần tử, mỗi phần tử làmy_tuple.- Kết quả là tuple của các tuple (nested tuple).
Nếu muốn làm phẳng (flatten) thành tuple đơn
# Cách 1: sum() với tuple rỗng làm khởi tạo flat = sum((my_tuple,) * N, ()) print(flat) # (11, 14, 0, 11, 14, 0, 11, 14, 0, 11, 14, 0, 11, 14, 0) # Cách 2: itertools.chain (hiệu quả hơn) from itertools import chain flat = tuple(chain.from_iterable((my_tuple,) * N)) print(flat) # Cách 3: List comprehension flat = tuple(x for _ in range(N) for x in my_tuple) print(flat)
Lặp từng phần tử riêng lẻ
# Mỗi phần tử lặp N lần: (11,11,11,11,11, 14,14,14,14,14, 0,0,0,0,0) repeated_elements = tuple(elem for elem in my_tuple for _ in range(N)) print(repeated_elements) # Hoặc dùng numpy import numpy as np print(tuple(np.repeat(my_tuple, N)))
Ứng dụng: Tạo dữ liệu test
# Tạo pattern test: (A, B, C) lặp 100 lần
pattern = ('A', 'B', 'C')
test_data = pattern * 100 # Tuple 300 phần tử
print(len(test_data)) # 300