Tin tức và phân tích của tất cả các thiết bị di động

Cách sử dụng bộ đếm python từ mô-đun bộ sưu tập

Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng đối tượng bộ đếm từ mô-đun bộ sưu tập Python.

Khi bạn làm việc với các chuỗi dài trong Python, chẳng hạn như danh sách hoặc chuỗi Python, đôi khi bạn có thể cần ghi lại các phần tử xuất hiện trong chuỗi và số lần chúng xuất hiện.

Từ điển của Python là cấu trúc dữ liệu tích hợp phù hợp cho các ứng dụng như vậy. Tuy nhiên, lớp Python Counter từ mô-đun bộ sưu tập có thể đơn giản hóa việc này bằng cách xây dựng một bộ đếm, là một từ điển gồm các phần tử và số của chúng theo một chuỗi.

Trong vài phút tiếp theo, bạn sẽ học được những điều sau:

  • Sử dụng đối tượng truy cập python
  • Tạo từ điển python để lưu trữ giá trị số của các phần tử trong iterable
  • Viết lại từ điển bằng bộ đếm python với cú pháp đơn giản
  • Thực hiện các thao tác như cập nhật và trừ các phần tử, tìm giao điểm giữa hai đối tượng truy cập
  • Lấy các phần tử phổ biến nhất trong bộ đếm bằng phương thức Most_common().

Hãy bắt đầu!

Mô-đun và lớp bộ đếm Python

Bạn sẽ thường sử dụng từ điển python để lưu trữ các mục và số lượng của chúng trong một lần lặp. Các phần tử và số đếm được lưu trữ tương ứng dưới dạng khóa và giá trị.

Vì lớp Counter là một phần của mô-đun bộ sưu tập Python tích hợp nên bạn có thể nhập nó vào tập lệnh Python của mình như sau:

from collections import Counter

Sau khi nhập lớp Counter như đã đề cập, bạn có thể khởi tạo đối tượng Counter như sau:

<counter_object> = Counter(iterable)

Đây:

  • iterable là bất kỳ Python hợp lệ nào có thể lặp lại, chẳng hạn như danh sách, chuỗi hoặc bộ dữ liệu Python.
  • Các phần tử trong một iterable phải có thể băm được.

Bây giờ chúng ta đã biết cách sử dụng bộ đếm để tạo các đối tượng bộ đếm từ bất kỳ phiên bản Python lặp lại nào, hãy bắt đầu viết mã.

Bạn có thể tìm thấy các ví dụ được sử dụng trong hướng dẫn này trong ý chính GitHub này.

Cách tạo đối tượng truy cập từ Iterables của Python

Hãy tạo một chuỗi python có nội dung “phục hưng” và gọi nó là một từ.

>>> word = "renaissance"

Mục tiêu của chúng tôi là tạo ra một từ điển trong đó mỗi chữ cái trong một chuỗi từ được ánh xạ tới số lần xuất hiện trong chuỗi. Một cách là sử dụng vòng lặp for như sau:

>>> letter_count = {}
>>> for letter in word:
...     if letter not in letter_count:
...         letter_count[letter] = 0
...     letter_count[letter] += 1
...
>>> letter_count
{'r': 1, 'e': 2, 'n': 2, 'a': 2, 'i': 1, 's': 2, 'c': 1}

Hãy cùng phân tích xem đoạn mã trên làm gì:

  • Khởi tạo letter_count cho một từ điển Python trống.
  • Vòng lặp một chuỗi các từ.
  • Kiểm tra xem một chữ cái có trong từ điển letter_count hay không.
  • Nếu chữ cái không có mặt, nó sẽ thêm nó với một giá trị 0sau đó tăng giá trị lên 1.
  • Với mỗi lần xuất hiện của một chữ cái trong một từ, giá trị tương ứng với chữ cái đó sẽ tăng lên bởi 1.
  • Điều này tiếp tục cho đến khi chúng ta đi qua toàn bộ chuỗi.

Chúng tôi đã tự mình xây dựng từ điển num_letter – bằng cách sử dụng vòng lặp for để lặp qua một chuỗi.

Bây giờ hãy sử dụng lớp Counter từ mô-đun bộ sưu tập. Chúng ta chỉ cần truyền một chuỗi từ vào hàm Counter() để lấy giá trị letter_count mà không cần phải lặp qua vòng lặp.

>>> from collections import Counter
>>> letter_count = Counter(word)
>>> letter_count
Counter({'e': 2, 'n': 2, 'a': 2, 's': 2, 'r': 1, 'i': 1, 'c': 1})

Đối tượng truy cập cũng là một từ điển python. Chúng ta có thể sử dụng hàm isinstance() tích hợp để kiểm tra điều này:

>>> isinstance(letter_count,dict)
True

Như bạn có thể thấy, isinstance(letter_count, dict) trả về True, cho biết đối tượng bộ đếm letter_count là một thể hiện của lớp dict Python.

Sửa đổi một đối tượng truy cập

Cho đến nay chúng ta đã học cách tạo các đối tượng đếm từ chuỗi Python.

Bạn cũng có thể sửa đổi các đối tượng bộ đếm bằng cách cập nhật chúng với các mục từ một lần lặp khác hoặc bằng cách trừ đi một lần lặp khác khỏi chúng.

Cập nhật bộ đếm với các mục từ một lần lặp khác

Hãy khởi tạo một chuỗi khác other_word:

>>> another_word = "effervescence"

Giả sử chúng ta muốn cập nhật đối tượng bộ đếm number_letters với các mục từ chuỗi another_word.

Chúng ta có thể sử dụng phương thức update() trên đối tượng bộ đếm letter_count.

>>> letter_count.update(another_word)
>>> letter_count
Counter({'e': 7, 'n': 3, 's': 3, 'c': 3, 'r': 2, 'a': 2, 'f': 2, 'i': 1, 'v': 1})

Trong kết quả đầu ra, chúng ta thấy rằng đối tượng bộ đếm đã được cập nhật để chứa các chữ cái và số lần xuất hiện của chúng từ other_word.

Trừ các mục từ một lần lặp khác

Bây giờ hãy trừ giá trị của other_word khỏi đối tượng letter_count. Chúng ta có thể sử dụng phương thứctrừ() cho việc này. Sử dụng .subtract() để trừ các giá trị tương ứng với các phần tử trong từ .

Hãy trừ other_word khỏi số_of_chữ cái.

>>> letter_count.subtract(another_word)
>>> letter_count
Counter({'e': 2, 'n': 2, 'a': 2, 's': 2, 'r': 1, 'i': 1, 'c': 1, 'f': 0, 'v': 0})

Chúng ta có thể thấy các giá trị tương ứng với các chữ cái trong một từ khác đã bị trừ đi nhưng phím “f” và “v” được thêm vào vẫn chưa bị loại bỏ. Bây giờ họ ánh xạ tới một giá trị 0.

Lưu ý: Ở đây chúng ta đã chuyển another_word, một chuỗi Python, để gọi phương thứctrừ(). Chúng ta cũng có thể truyền một đối tượng truy cập python hoặc một số đối tượng có thể lặp lại khác.

Giao điểm giữa hai quầy trong python

Đôi khi bạn có thể muốn tìm giao điểm giữa hai bộ đếm python để xác định khóa nào được chia sẻ bởi cả hai.

Hãy tạo một đối tượng đếm, chẳng hạn như number_of_2, từ chuỗi other_word ‘lấp lánh’.

>>> another_word = "effervescence"
>>> letter_count_2 = Counter(another_word)
>>> letter_count_2
Counter({'e': 5, 'f': 2, 'c': 2, 'r': 1, 'v': 1, 's': 1, 'n': 1})

Chúng ta có thể sử dụng toán tử & đơn giản để tìm giao điểm giữa letter_count và letter_count_2.

>>> letter_count & letter_count_2
Counter({'e': 2, 'r': 1, 'n': 1, 's': 1, 'c': 1})

Lưu ý cách bạn nhận được các khóa và số lần xuất hiện chung của hai từ. Cả “renaissance” và “sparkling” đều chứa hai trường hợp của “e” và một lần xuất hiện phổ biến của mỗi trường hợp là “r”, “n”, “s” và “c”.

Tìm các mục phổ biến nhất bằng common_bridge

Một thao tác phổ biến khác trên đối tượng bộ đếm Python là tìm các phần tử phổ biến nhất.

Để có danh sách k phần tử bộ đếm phổ biến nhất, bạn có thể sử dụng phương thức Most_common() trên đối tượng bộ đếm. Ở đây chúng ta gọi Most_common() trên letter_count để tìm ba chữ cái phổ biến nhất.

>>> letter_count.most_common(3)
[('e', 2), ('n', 2), ('a', 2)]

Chúng ta thấy các chữ cái “e”, “n” và “a” xuất hiện hai lần trong từ “renaissance”.

Điều này đặc biệt hữu ích nếu bộ đếm chứa một số lượng lớn các mục và bạn muốn làm việc với các phím được sử dụng thường xuyên nhất.

Ứng dụng

Dưới đây là tóm tắt nhanh những gì chúng ta đã học được trong hướng dẫn:

  • Lớp Counter từ mô-đun bộ sưu tập tích hợp của Python có thể được sử dụng để lấy từ điển các giá trị đếm của tất cả các phần tử trong bất kỳ lần lặp nào. Bạn nên đảm bảo rằng tất cả các mục trong iterable đều có thể băm được.
  • Bạn có thể cập nhật nội dung của một đối tượng bộ đếm Python với nội dung của một đối tượng bộ đếm khác hoặc bất kỳ đối tượng bộ đếm nào khác bằng cách sử dụng phương thức update() với cú pháp: counter1.update(counter2). Lưu ý rằng bạn có thể sử dụng bất kỳ iterable nào thay vì counter2.
  • Nếu bạn muốn xóa nội dung của một trong các lần lặp khỏi bộ đếm được cập nhật, bạn có thể sử dụng phương thứctrừ(): counter1.subtract(counter2).
  • Để tìm các phần tử chung giữa hai đối tượng truy cập, bạn có thể sử dụng toán tử &. Cho hai bộ đếm counter1 và counter2, counter1 & counter2 trả về giao điểm của hai bộ đếm.
  • Để lấy k phần tử phổ biến nhất trong tử số, bạn có thể sử dụng phương thức Most_common(). counter.most_common(k) cung cấp k phần tử phổ biến nhất và các số tương ứng.

Sau đó, tìm hiểu cách sử dụng lệnh mặc định, một lớp khác trong mô-đun bộ sưu tập. Bạn có thể sử dụng dict mặc định thay vì từ điển python thông thường để xử lý các khóa bị thiếu.

Mục lục