Khi cần xóa các tuple trùng lặp khỏi một danh sách các tuple, có thể sử dụng vòng lặp, phương thức any và enumerate.
Phương thức any kiểm tra xem có giá trị nào trong iterable là True hay không (tức là ít nhất một giá trị là True). Nếu có, trả về True, ngược lại trả về False.
Danh sách trong Python có thể lưu trữ các giá trị khác kiểu (heterogeneous) như số nguyên, số thực, chuỗi, v.v. Danh sách tuple cơ bản là các tuple được bao quanh bởi một danh sách.
Phương thức enumerate thêm một bộ đếm vào iterable đã cho và trả về nó.
Ví dụ
def remove_duplicate_tuples(tuple_list):
"""
Loại bỏ các tuple trùng lặp khỏi danh sách tuple, giữ thứ tự xuất hiện đầu tiên.
"""
seen = set()
result = []
for tup in tuple_list:
if tup not in seen:
seen.add(tup)
result.append(tup)
return result
# Danh sách tuple mẫu
my_list = [(23, 45), (25, 17), (35, 67), (25, 17)]
print("Danh sách tuple ban đầu:")
print(my_list)
print("\nĐang gọi hàm loại bỏ trùng lặp...")
unique_list = remove_duplicate_tuples(my_list)
print("Danh sách sau khi loại bỏ trùng lặp:")
print(unique_list)
Kết quả
Danh sách tuple ban đầu: [(23, 45), (25, 17), (35, 67), (25, 17)] Đang gọi hàm loại bỏ trùng lặp... Danh sách sau khi loại bỏ trùng lặp: [(23, 45), (25, 17), (35, 67)]
Giải thích
- Hàm
remove_duplicate_tuplesnhận một danh sách tuple làm tham số. - Sử dụng
setđể theo dõi các tuple đã thấy (tìm kiếm O(1)). - Duyệt qua danh sách, chỉ thêm tuple vào kết quả nếu chưa xuất hiện trong
seen. - Cách này giữ nguyên thứ tự xuất hiện đầu tiên của mỗi tuple.
- Kết quả trả về là danh sách mới chỉ chứa các tuple duy nhất.
Cách khác: Sử dụng dict (Python 3.7+)
def remove_duplicates_v2(tuple_list):
# dict.fromkeys giữ thứ tự chèn từ Python 3.7
return list(dict.fromkeys(tuple_list))
Cách này ngắn gọn hơn và hiệu quả tương đương.