Hàm đệ quy flatten_tuple biến cấu trúc tuple lồng nhau phức tạp thành tuple phẳng chỉ chứa các tuple con cấp 1.
Ví dụ
def flatten_tuple(t):
# Nếu t là tuple độ dài 2 và phần tử đầu không phải tuple -> trả về tuple chứa t
if isinstance(t, tuple) and len(t) == 2 and not isinstance(t[0], tuple):
return (t,)
result = []
for sub in t:
result.extend(flatten_tuple(sub))
return tuple(result)
my_tuple = ((35, 46), ((67, 70), (8, 11), (10, 111)), ((21, 12), (3, 4)))
print("Tuple gốc:", my_tuple)
print("Tuple làm phẳng:", flatten_tuple(my_tuple))
Kết quả
Tuple gốc: ((35, 46), ((67, 70), (8, 11), (10, 111)), ((21, 12), (3, 4))) Tuple làm phẳng: ((35, 46), (67, 70), (8, 11), (10, 111), (21, 12), (3, 4))
Giải thích
- Hàm kiểm tra nếu tuple có độ dài 2 và phần tử đầu không phải tuple -> coi là tuple lá, trả về tuple chứa nó.
- Ngược lại, duyệt qua từng phần tử con, gọi đệ quy và mở rộng kết quả.
- Cuối cùng chuyển list kết quả thành tuple.
- Phù hợp cho cấu trúc tuple lồng nhau không đều.