Khi list chứa phần tử trùng lặp, len(list) trả về tổng số phần tử (kể cả trùng). Để đếm số phần tử duy nhất (distinct/unique), ta dùng Counter từ collections hoặc chuyển sang set.
Cách 1: Dùng Counter (như bài gốc)
from collections import Counter
my_list = ['Mon', 'Tue', 'Wed', 'Mon', 'Tue']
print("Độ dài list gốc:", len(my_list))
# Counter.keys() trả về view các key duy nhất
distinct = Counter(my_list).keys()
print("Các phần tử khác nhau:", list(distinct))
print("Số phần tử khác nhau:", len(distinct))
Kết quả
Độ dài list gốc: 5 Các phần tử khác nhau: ['Mon', 'Tue', 'Wed'] Số phần tử khác nhau: 3
Cách 2: Dùng set (khuyên dùng - đơn giản hơn)
my_list = ['Mon', 'Tue', 'Wed', 'Mon', 'Tue']
distinct_set = set(my_list)
print("Số phần tử khác nhau:", len(distinct_set))
print("Các phần tử:", distinct_set)
Kết quả
Số phần tử khác nhau: 3
Các phần tử: {'Mon', 'Tue', 'Wed'}
So sánh
| Phương pháp | Ưu điểm | Nhược điểm |
|---|---|---|
| Counter.keys() | Giữ thông tin tần suất nếu cần sau này | Hơi phức tạp cho việc chỉ đếm distinct |
| set() | Ngắn gọn, nhanh, pythonic | Mất thông tin tần suất |
Kết luận
Để chỉ đếm số phần tử duy nhất, hãy dùng len(set(my_list)). Dùng Counter khi cần cả tần suất.