Cách thiết lập kiểm tra trùng lặp python
Trong năm năm đầu tiên viết mã bằng Python, tôi hầu như chưa bao giờ sử dụng cấu trúc dữ liệu # read in two files and create a vocabulary set for each9 tích hợp sẵn. Gần đây, tôi đã đánh giá cao các bộ, nhờ một dự án yêu cầu nhiều xử lý văn bản và kiểm tra xem một số từ nhất định có xuất hiện trong một số văn bản nhất định hay không. Tôi ước tôi đã khám phá chúng sớm hơn. Hãy bắt đầu với một tổng quan nhanh về bộ là gì Show Có hai điểm khác biệt chính giữa danh sách Python và tập hợp
Cũng có nhiều điểm tương đồng giữa danh sách và tập hợp trong Python
Thật dễ dàng để tạo và sử dụng các bộ
Bây giờ chúng ta hãy xem xét một số trường hợp sử dụng phổ biến và hữu ích cho bộ 1. Xóa các mục trùng lặp khỏi danh sáchMột thuộc tính cơ bản của các tập hợp là chúng không lưu trữ các lần lặp lại. Giả sử bạn có danh sách # read in two files and create a vocabulary set for each5 Bằng cách chuyển đổi nó thành một tập hợp rồi quay lại danh sách, bạn có thể xóa các mục trùng lặp list(set(letters))Output: ["a", "b", "d", "e", "c"] Bạn có thể sử dụng công cụ này để nhanh chóng lấy tổng số từ vựng của một văn bản hoặc để lấy tất cả các ký tự duy nhất được sử dụng trong tài liệu. Điều này có thể rất hữu ích trong giai đoạn tiền xử lý của nhiệm vụ học máy hoặc NLP. Tất nhiên, điều này cũng hoạt động với các loại dữ liệu ngoài văn bản, bao gồm cả số và đối tượng không thay đổi 2. Tìm giao lộ, liên kết và khác biệtSau đây là ba thao tác quan trọng có thể được thực hiện với các tập hợp
Các hoạt động này được hiểu rõ nhất bằng sơ đồ Venn. Trong mỗi hình dưới đây, hình tròn trên là A và hình tròn dưới là B. Vùng màu xanh biểu thị tập hợp là kết quả của mỗi thao tác Ngã tư. Giả sử bạn muốn biết những từ nào được chia sẻ chung giữa hai văn bản. Điều này tương ứng với hình bên trái ở trên, trong đó chúng tôi chỉ chọn các phần chồng chéo của các tập hợp. Các bộ Python giúp dễ dàng tạo các bộ từ vựng cho hai (hoặc nhiều) văn bản, sau đó tính toán giao điểm, như được hiển thị trong mã bên dưới # read in two files and create a vocabulary set for each Lưu ý sự giống nhau giữa toán tử # read in two files and create a vocabulary set for each6 và logic và toán tử # read in two files and create a vocabulary set for each7 trong nhiều ngôn ngữ. Bạn có thể nhớ điều này, vì toán tử này chỉ chọn các mục có trong tập hợp A và tập hợp B. Để thay thế cho toán tử # read in two files and create a vocabulary set for each6, phương thức # read in two files and create a vocabulary set for each9 có thể được gọi, như trong ví dụ sau # read in two files and create a vocabulary set for each2 liên hiệp. Hoạt động này hợp nhất hai bộ. Nó tương ứng với hình trung tâm ở trên, trong đó chúng tôi chọn tổng diện tích được bao phủ bởi cả hai bộ cùng nhau. Theo thuộc tính cơ bản của tập hợp, các bản sao sẽ không được lưu trữ. Ví dụ, chúng ta có thể sử dụng điều này để tìm tất cả các từ duy nhất xuất hiện trong hai (hoặc nhiều) cuốn sách khác nhau # read in two files and create a vocabulary set for each3 Lưu ý sự giống nhau giữa toán tử # read in two files and create a vocabulary set for each20 và logic hoặc toán tử # read in two files and create a vocabulary set for each21 trong nhiều ngôn ngữ. Bạn có thể nhớ điều này, vì toán tử này chọn các mục có trong tập hợp A hoặc tập hợp B. Để thay thế cho toán tử # read in two files and create a vocabulary set for each20, phương thức # read in two files and create a vocabulary set for each23 có thể được gọi Sự khác biệt. Thao tác này loại bỏ các phần tử của một tập hợp nếu chúng cũng thuộc tập hợp kia. Nó tương ứng với hình bên phải ở trên. Không giống như hai phép toán trước, hiệu của tập hợp không có tính chất giao hoán, vì vậy A - B không giống với B - A. Bạn có thể giải thích bằng lời đoạn mã sau làm gì không? # read in two files and create a vocabulary set for each8 Câu trả lời. mã in các từ trong tệp đầu tiên không có trong tệp thứ hai. Điều này có thể hữu ích, như một ví dụ, khi phân tích hiệu suất cho các mô hình ngôn ngữ đối với các từ nằm ngoài từ vựng. Để thay thế cho toán tử # read in two files and create a vocabulary set for each24, phương thức # read in two files and create a vocabulary set for each25 có thể được gọi Chuỗi hoạt động. Nhiều hoạt động có thể được xâu chuỗi lại với nhau, như vậy
hoạt động bổ sung. Có các phép toán bổ sung để kiểm tra xem một tập hợp là tập hợp con (nghiêm ngặt) hay tập hợp con (nghiêm ngặt) của một tập hợp khác, sử dụng các toán tử sau. # read in two files and create a vocabulary set for each29. Tôi sẽ không đi vào chi tiết quá nhiều về những điều này, bởi vì bạn thực sự có thể thực hiện các thao tác này bằng cách sử dụng ba thao tác mà chúng ta đã thảo luận. Để biết thêm thông tin, hãy xem tài liệu Python về bộ 3. Truy vấn nhanh cho thành viênRất nhanh để kiểm tra tư cách thành viên của một phần tử trong một tập hợp. Điều này là do cấu trúc dữ liệu cơ bản của một bộ Python là một bảng băm, làm cho chúng tương tự như từ điển Python, chỉ với các khóa thay vì các cặp khóa-giá trị. Rất nhiều thuật toán sẽ mất thời gian tuyến tính cho danh sách Python sẽ mất thời gian gần như không đổi cho một tập hợp Nhìn bề ngoài, việc sử dụng danh sách và tập hợp để kiểm tra tư cách thành viên có thể trông khá giống nhau # read in two files and create a vocabulary set for each5 Tuy nhiên, nếu có hàng nghìn hoặc hàng triệu mục trong # read in two files and create a vocabulary set for each30 và # read in two files and create a vocabulary set for each31, thì chúng tôi sẽ bắt đầu nhận thấy sự khác biệt. Biểu đồ sau đây cho thấy kết quả của một số thử nghiệm mà tôi đã thực hiện để so sánh thời gian kiểm tra tư cách thành viên cho danh sách và tập hợp. Khi kích thước của danh sách hoặc tập hợp lớn hơn, sự khác biệt về thời gian giữa danh sách và tập hợp sẽ tăng lên. Đối với các ứng dụng mà bạn sẽ liên tục tìm kiếm xem một mục có tồn tại hoặc đã được nhìn thấy trước đó hay không, hãy cân nhắc sử dụng một tập hợp thay vì danh sách Sự kết luậnCó rất nhiều tình huống trong đó các tập hợp có thể giúp cuộc sống của bạn dễ dàng hơn hoặc tăng tốc độ tính toán. Ngoài ra, có một điều gì đó rất thú vị trong Pythonic về việc loại bỏ các bản sao khỏi danh sách bằng cách sử dụng # read in two files and create a vocabulary set for each32 hoặc thực hiện các thao tác thiết lập một dòng mà không cần dùng đến các vòng lặp for. Đây không phải là danh sách đầy đủ các ứng dụng tập hợp, vì vậy vui lòng để lại nhận xét nếu bạn nghĩ rằng tôi đã bỏ qua bất kỳ cách sử dụng tập hợp nào khác Bộ có trùng lặp trong Python không?Các tập hợp không được chứa các mục trùng lặp . Các bản sao bị loại bỏ khi khởi tạo một tập hợp. Nếu thêm một phần tử vào một tập hợp và phần tử đó đã được chứa trong tập hợp thì tập hợp sẽ không thay đổi.
Làm cách nào để thiết lập theo dõi các giá trị trùng lặp?Tập hợp là Tập hợp không được chứa các phần tử trùng lặp. Nó mô hình trừu tượng tập hợp toán học. Giao diện Set chỉ chứa các phương thức kế thừa từ Bộ sưu tập và thêm hạn chế cấm các phần tử trùng lặp .
Làm cách nào để đặt Bộ sưu tập tránh trùng lặp?Nếu tập hợp này đã chứa phần tử, trùng lặp sẽ bị bỏ qua, giữ nguyên tập hợp và trả về false . Điều này đảm bảo rằng các tập hợp không bao giờ chứa các phần tử trùng lặp. |