Cách đếm số lần xuất hiện trong danh sách bằng Python
Tìm hiểu những cách tốt nhất để đếm số lần xuất hiện của các phần tử trong danh sách Python. So sánh phương thức count(), Collections.Counter và đếm từ điển.
Tổng quan
Phân tích tập dữ liệu thường yêu cầu bạn đếm số lần xuất hiện của từng phần tử. Ví dụ: đếm số phiếu bầu mà mỗi ứng cử viên nhận được, đếm tần suất từ trong tệp văn bản hoặc xác định các bản sao trong nhật ký giao dịch. Python cung cấp một số công cụ để giải quyết vấn đề này, tùy thuộc vào việc bạn đang tìm kiếm số lượng mục đơn lẻ hay kiểm đếm tần suất hoàn chỉnh.
Để kiểm tra tần suất của một phần tử cụ thể, loại danh sách tích hợp sẵn cung cấp phương thức `.count(value)`. Nó lặp lại danh sách và trả về một số nguyên đếm số lần giá trị chính xác đó xuất hiện. Mặc dù đơn giản và dễ đọc, nhưng việc gọi `.count()` trong một vòng lặp để đếm số lượng cho tất cả các phần tử là rất kém hiệu quả, chạy ở độ phức tạp O(N^2).
Để đếm tần số của tất cả các phần tử cùng một lúc trong một lượt, thư viện tiêu chuẩn cung cấp lớp `Bộ đếm` trong mô-đun `bộ sưu tập`. Truyền một danh sách tới `Counter` trả về một đối tượng giống như từ điển biểu thị tần số của tất cả các phần tử trong thời gian O(N). Nó cũng cung cấp các phương thức trợ giúp như `most_common()` để nhanh chóng truy xuất các mục hàng đầu.
Đầu ra mã & thực thi
Mã này trình bày cách đếm các phần tử đơn lẻ trong danh sách và nhận tổng số mục bằng cách sử dụng bộ sưu tập.Counter.
from collections import Counter
colors = ["red", "blue", "red", "green", "blue", "red"]
# Method 1: Count a single item using list.count()
red_count = colors.count("red")
print("Occurrences of 'red':", red_count)
# Method 2: Count all items using collections.Counter (Fast and powerful)
color_counts = Counter(colors)
print("\nCounter Object:", color_counts)
print("Count of 'blue':", color_counts["blue"])
# Getting the top most common items
print("Most common color:", color_counts.most_common(1))
# Method 3: Counting manually using a loop and a standard dictionary
manual_counts = {}
for item in colors:
manual_counts[item] = manual_counts.get(item, 0) + 1
print("\nManual dict count:", manual_counts)Occurrences of 'red': 3
Counter Object: Counter({'red': 3, 'blue': 2, 'green': 1})
Count of 'blue': 2
Most common color: [('red', 3)]
Manual dict count: {'red': 3, 'blue': 2, 'green': 1}Triển khai từng bước
- Gọi list_variable.count(value) nếu bạn chỉ cần đếm một mục cụ thể trong danh sách.
- Nhập bộ sưu tập. Bộ đếm và chuyển danh sách để đếm tất cả các phần tử duy nhất trong một lượt được tối ưu hóa duy nhất.
- Sử dụng phương thức .most_common(n) trên đối tượng Counter để trích xuất n phần tử thường xuyên nhất.
Câu hỏi thường gặp
Điều gì xảy ra nếu tôi tra cứu khóa bị thiếu trong đối tượng Collection.Counter?
Không giống như từ điển tiêu chuẩn phát sinh KeyError, đối tượng Counter trả về 0 cho các phần tử bị thiếu, biểu thị số lần xuất hiện bằng 0.
Độ phức tạp về thời gian của Bộ đếm so với việc đếm trong vòng lặp với list.count() là bao nhiêu?
Bộ đếm đếm tất cả các phần tử trong thời gian tuyến tính O(N) bằng cách đi qua danh sách một lần. Việc lặp lại các phần tử trong danh sách và gọi list.count() mất O(N^2) thời gian bậc hai, cực kỳ chậm đối với các danh sách lớn.
Chủ đề liên quan
Tìm hiểu cách tìm độ dài của danh sách trong Python bằng hàm len(). Hiểu độ phức tạp về thời gian O(1) và số lần kiểm tra.
Cách xóa danh sách trùng lặp khỏi danh sách trong PythonTìm hiểu cách xóa các bản sao khỏi danh sách bằng Python trong khi duy trì hoặc bỏ qua thứ tự. So sánh các chuyển đổi tập hợp, khóa chính tả và phương thức vòng lặp.
Tài nguyên Python được đề xuất
Mở rộng kiến thức của bạn với các hướng dẫn tương tác, bảng ghi chú và so sánh mã có liên quan.
Danh sách Python
Tìm hiểu mọi thứ về danh sách Python. Khám phá cách tạo, cắt, sửa đổi và lặp qua các mảng trong Python nguyên bản.
Bảng cheat phương thức chuỗi Python
Hướng dẫn tham khảo đầy đủ về thao tác chuỗi Python. Làm chủ định dạng, tìm kiếm, phân tách, thay thế và kiểm tra thuộc tính chuỗi.
Python vs JavaScript: Ngôn ngữ lập trình nào tốt nhất?
So sánh toàn diện giữa Python và JavaScript. Khám phá sự khác biệt về cú pháp, hiệu suất, trường hợp sử dụng (phụ trợ so với giao diện người dùng) và các ví dụ về mã hóa.