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 each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
9 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ì

Có hai điểm khác biệt chính giữa danh sách Python và tập hợp

  • Không giống như danh sách, bộ không có thứ tự. Bạn không thể truy cập các phần tử của tập hợp theo chỉ mục. Thứ tự bạn nhìn thấy khi in một tập hợp không nhất thiết là thứ tự các phần tử được thêm vào
  • Bộ không thể chứa 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

Cũng có nhiều điểm tương đồng giữa danh sách và tập hợp trong Python

  • Bạn vẫn có thể sử dụng
    # read in two files and create a vocabulary set for each
    # makes everything lowercase so we ignore capitalization
    with open[filename1] as f:
    vocab1 = set[f.read[].lower[].split[]]
    with open[filename2] as f:
    vocab2 = set[f.read[].lower[].split[]]
    print[vocab1 & vocab2]
    0 để lấy kích thước của một tập hợp
  • Bạn vẫn có thể sử dụng
    # read in two files and create a vocabulary set for each
    # makes everything lowercase so we ignore capitalization
    with open[filename1] as f:
    vocab1 = set[f.read[].lower[].split[]]
    with open[filename2] as f:
    vocab2 = set[f.read[].lower[].split[]]
    print[vocab1 & vocab2]
    1 để kiểm tra tư cách thành viên của một mục nhất định
  • Các bộ có thể lặp lại bằng cú pháp
    # read in two files and create a vocabulary set for each
    # makes everything lowercase so we ignore capitalization
    with open[filename1] as f:
    vocab1 = set[f.read[].lower[].split[]]
    with open[filename2] as f:
    vocab2 = set[f.read[].lower[].split[]]
    print[vocab1 & vocab2]
    2

Thật dễ dàng để tạo và sử dụng các bộ

  • Bạn có thể tạo một bộ rõ ràng như thế này.
    # read in two files and create a vocabulary set for each
    # makes everything lowercase so we ignore capitalization
    with open[filename1] as f:
    vocab1 = set[f.read[].lower[].split[]]
    with open[filename2] as f:
    vocab2 = set[f.read[].lower[].split[]]
    print[vocab1 & vocab2]
    0
  • Bạn có thể tạo một tập hợp từ danh sách hoặc có thể lặp lại khác như thế này.
    # read in two files and create a vocabulary set for each
    # makes everything lowercase so we ignore capitalization
    with open[filename1] as f:
    vocab1 = set[f.read[].lower[].split[]]
    with open[filename2] as f:
    vocab2 = set[f.read[].lower[].split[]]
    print[vocab1 & vocab2]
    1. Đối số của
    # read in two files and create a vocabulary set for each
    # makes everything lowercase so we ignore capitalization
    with open[filename1] as f:
    vocab1 = set[f.read[].lower[].split[]]
    with open[filename2] as f:
    vocab2 = set[f.read[].lower[].split[]]
    print[vocab1 & vocab2]
    2 phải là một đối số có thể lặp lại, vì vậy bạn có thể cung cấp cho nó một danh sách, một chuỗi, Chuỗi Pandas hoặc nhiều loại dữ liệu khác
  • Bạn có thể thêm từng mục một bằng cách trước tiên tạo một bộ trống
    # read in two files and create a vocabulary set for each
    # makes everything lowercase so we ignore capitalization
    with open[filename1] as f:
    vocab1 = set[f.read[].lower[].split[]]
    with open[filename2] as f:
    vocab2 = set[f.read[].lower[].split[]]
    print[vocab1 & vocab2]
    3 và sau đó sử dụng
    # read in two files and create a vocabulary set for each
    # makes everything lowercase so we ignore capitalization
    with open[filename1] as f:
    vocab1 = set[f.read[].lower[].split[]]
    with open[filename2] as f:
    vocab2 = set[f.read[].lower[].split[]]
    print[vocab1 & vocab2]
    4

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ách

Mộ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 each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
5

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ệt

Sau đây là ba thao tác quan trọng có thể được thực hiện với các tập hợp

  • Giao lộ [A & B]
  • Đoàn [A. b]
  • Chênh lệch [A - B]

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

Hình ảnh của tác giả

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
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]

Lưu ý sự giống nhau giữa toán tử

# read in two files and create a vocabulary set for each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
6 và logic và toán tử
# read in two files and create a vocabulary set for each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
7 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 each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
6, phương thức
# read in two files and create a vocabulary set for each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
9 có thể được gọi, như trong ví dụ sau

# read in two files and create a vocabulary set for each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
2

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 each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
3

Lưu ý sự giống nhau giữa toán tử

# read in two files and create a vocabulary set for each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
20 và logic hoặc toán tử
# read in two files and create a vocabulary set for each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
21 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 each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
20, phương thức
# read in two files and create a vocabulary set for each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
23 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 each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
8

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 each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
24, phương thức
# read in two files and create a vocabulary set for each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
25 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

  • # read in two files and create a vocabulary set for each
    # makes everything lowercase so we ignore capitalization
    with open[filename1] as f:
    vocab1 = set[f.read[].lower[].split[]]
    with open[filename2] as f:
    vocab2 = set[f.read[].lower[].split[]]
    print[vocab1 & vocab2]
    26
  • # read in two files and create a vocabulary set for each
    # makes everything lowercase so we ignore capitalization
    with open[filename1] as f:
    vocab1 = set[f.read[].lower[].split[]]
    with open[filename2] as f:
    vocab2 = set[f.read[].lower[].split[]]
    print[vocab1 & vocab2]
    27
  • # read in two files and create a vocabulary set for each
    # makes everything lowercase so we ignore capitalization
    with open[filename1] as f:
    vocab1 = set[f.read[].lower[].split[]]
    with open[filename2] as f:
    vocab2 = set[f.read[].lower[].split[]]
    print[vocab1 & vocab2]
    28

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 each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
29. 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ên

Rấ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 each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
5

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 each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
30 và
# read in two files and create a vocabulary set for each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
31, 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

Hình ảnh của tác giả

Sự kết luận

Có 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 each
# makes everything lowercase so we ignore capitalization
with open[filename1] as f:
vocab1 = set[f.read[].lower[].split[]]
with open[filename2] as f:
vocab2 = set[f.read[].lower[].split[]]
print[vocab1 & vocab2]
32 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.

Chủ Đề