Mô-đun bộ sưu tập Python: Các loại vùng chứa nâng cao
Tìm hiểu cách sử dụng mô-đun bộ sưu tập của Python. Bộ đếm chính, defaultdict, namtuple, deque và cách đơn giản hóa các cấu trúc dữ liệu phức tạp.
Tổng quan
Trong khi các vùng chứa cơ bản của Python—danh sách, từ điển, bộ và bộ dữ liệu—là đủ cho hầu hết các tác vụ, thì các chương trình phức tạp thường yêu cầu các cấu trúc dữ liệu chuyên biệt. Để giải quyết vấn đề này, Python cung cấp mô-đun `bộ sưu tập` tích hợp sẵn. Mô-đun này chứa các kiểu dữ liệu vùng chứa hiệu suất cao được thiết kế để giải quyết các tác vụ lập trình phổ biến hiệu quả hơn và có cú pháp tự ghi tài liệu rõ ràng hơn.
Trong số các lớp hữu ích nhất là `defaultdict`, hoạt động giống như một từ điển thông thường nhưng tự động khởi tạo các khóa bị thiếu với giá trị mặc định (như danh sách trống hoặc số nguyên 0), loại bỏ nhu cầu kiểm tra khóa dài dòng. Một sức mạnh khác là lớp `Counter`, được tối ưu hóa đặc biệt để kiểm đếm số lần xuất hiện của các mục trong một lần lặp. Đối với các hàng đợi và ngăn xếp nhanh, `deque` (hàng đợi hai đầu) cung cấp tính năng chèn và xóa `O(1)` ở cả hai đầu, không giống như các danh sách bị dịch chuyển `O(N)`.
Cuối cùng, mô-đun này cung cấp `namedtuple`, tạo ra các đối tượng nhẹ, giống như bộ dữ liệu có thể được truy cập bằng cách sử dụng ký hiệu dấu chấm cũng như các chỉ mục truyền thống (ví dụ: `point.x` thay vì `point[0]`). Điều này mang lại cho bạn tốc độ và tính bất biến của một bộ dữ liệu với khả năng đọc của một lớp. Việc kết hợp mô-đun bộ sưu tập vào quy trình làm việc của bạn đảm bảo rằng mã của bạn vẫn tinh tế, hiệu quả và rõ ràng.
Đầu ra mã & thực thi
Kiểm đếm các từ bằng cách sử dụng Counter và tổ chức các nhóm từ điển với defaultdict.
from collections import Counter, defaultdict, namedtuple
# 1. Counter: Tallying items
votes = ["yes", "no", "yes", "yes", "no"]
vote_counts = Counter(votes)
print(f"Vote Counts: {vote_counts}")
print(f"Most common: {vote_counts.most_common(1)}")
# 2. defaultdict: Grouping values
grouped_data = defaultdict(list)
grouped_data["engineers"].append("Alice")
grouped_data["engineers"].append("Bob")
print(f"Grouped Data: {dict(grouped_data)}")
# 3. namedtuple: Clean records
Point = namedtuple("Point", ["x", "y"])
p = Point(10, 20)
print(f"Point x: {p.x}, Point y: {p.y}")Vote Counts: Counter({'yes': 3, 'no': 2})
Most common: [('yes', 3)]
Grouped Data: {'engineers': ['Alice', 'Bob']}
Point x: 10, Point y: 20Triển khai từng bước
- Phân tích tệp nhật ký để đếm số lần xuất hiện lỗi thông qua Bộ đếm
- Xây dựng hàng đợi ưu tiên hoặc lập lịch tác vụ bằng cách sử dụng deque
- Biểu diễn kích thước tọa độ hoặc bản ghi dữ liệu bằng cách sử dụng bộ tên
Câu hỏi thường gặp
Tại sao deque nhanh hơn danh sách cho các hoạt động xếp hàng?
Một danh sách yêu cầu dịch chuyển tất cả các phần tử tiếp theo trong bộ nhớ khi chèn hoặc xóa từ phía trước (O(N)). Deque được triển khai dưới dạng danh sách liên kết đôi, cho phép thực hiện các thao tác O(1) ở cả hai đầu.
Tôi có thể thay đổi các thành phần của một bộ có tên không?
Không. Vì các bộ dữ liệu được đặt tên kế thừa từ các bộ dữ liệu tiêu chuẩn nên chúng hoàn toàn không thể thay đổi. Bạn phải sử dụng phương thức ._replace() để trả về một phiên bản được sửa đổi mới.
Chủ đề liên quan
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.
Từ điển PythonLàm chủ từ điển Python. Tìm hiểu cách lưu trữ, tìm nạp và xử lý dữ liệu cặp khóa-giá trị. Hiểu hiệu suất và các phương pháp hay nhất để ánh xạ.
Python ItertoolsTìm hiểu mô-đun itertools của Python. Làm chủ các trình lặp vô hạn, tổ hợp, hoán vị, nhóm và xử lý dữ liệu hiệu quả về bộ nhớ.
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.
Cách sắp xếp danh sách trong Python
Tìm hiểu cách sắp xếp danh sách trong Python bằng phương thức Sort() và hàm Sort(). Khám phá các ví dụ về sắp xếp khóa tùy chỉnh và thứ tự đảo ngược.
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.