Khi cần lấy kiểu dữ liệu của từng phần tử trong tuple, có thể sử dụng hàm map() kết hợp với hàm type().
Hàm map() áp dụng một hàm cho mỗi phần tử trong iterable (list, tuple) và trả về iterator (Python 3).
Hàm type() trả về kiểu class của đối số được truyền vào.
Ví dụ
# Tuple chứa các kiểu dữ liệu khác nhau
my_tuple = ('Hello', 23, ['there', 'Will'], 3.14, True, {'key': 'value'})
print(f"Tuple: {my_tuple}")
# Lấy kiểu dữ liệu của từng phần tử
# map(type, my_tuple) áp dụng type() cho mỗi phần tử
# list() chuyển iterator thành list
data_types = list(map(type, my_tuple))
print("\nKiểu dữ liệu của các phần tử theo thứ tự:")
for i, (elem, dtype) in enumerate(zip(my_tuple, data_types)):
print(f" Phần tử {i}: {repr(elem):20} -> {dtype}")
Kết quả
Tuple: ('Hello', 23, ['there', 'Will'], 3.14, True, {'key': 'value'})
Kiểu dữ liệu của các phần tử theo thứ tự:
Phần tử 0: 'Hello' -> <class 'str'>
Phần tử 1: 23 -> <class 'int'>
Phần tử 2: ['there', 'Will'] -> <class 'list'>
Phần tử 3: 3.14 -> <class 'float'>
Phần tử 4: True -> <class 'bool'>
Phần tử 5: {'key': 'value'} -> <class 'dict'>
Giải thích
- Tuple mẫu chứa 6 phần tử với 6 kiểu dữ liệu khác nhau: str, int, list, float, bool, dict.
map(type, my_tuple)áp dụng hàmtypecho từng phần tử.list()chuyển iterator kết quả thành list để dễ hiển thị/lưu trữ.- Kết quả là list chứa các đối tượng type (class) tương ứng.
Cách khác: List comprehension
# Tương đương nhưng dễ đọc hơn data_types = [type(elem) for elem in my_tuple] # Chỉ lấy tên kiểu dữ liệu dưới dạng string type_names = [type(elem).__name__ for elem in my_tuple] print(type_names) # ['str', 'int', 'list', 'float', 'bool', 'dict']
Ứng dụng thực tế
def validate_tuple_types(tuple_data, expected_types):
"""Kiểm tra tuple có khớp kiểu dữ liệu mong đợi không."""
actual_types = [type(x) for x in tuple_data]
return actual_types == expected_types
# Ví dụ: tuple (str, int, list)
schema = [str, int, list]
test_data = ('Alice', 25, ['reading', 'swimming'])
print(validate_tuple_types(test_data, schema)) # True