Computer >> Máy Tính >  >> Lập trình >> Python

Làm thế nào để xác định các mục thường xuyên xuất hiện nhất trong một chuỗi với Python?

Vấn đề

Bạn cần xác định các mục xuất hiện thường xuyên nhất theo một trình tự.

Giải pháp

Chúng ta có thể sử dụng bộ đếm để theo dõi các mặt hàng theo trình tự.

Bộ đếm là gì?

“Bộ đếm” là một ánh xạ chứa một số nguyên cho mỗi khóa. Cập nhật một khóa hiện có sẽ làm tăng số lượng của nó. Mục tiêu này được sử dụng để đếm các phiên bản của các đối tượng có thể băm hoặc như một tập hợp nhiều người.

“Bộ đếm” là một trong những người bạn tốt nhất của bạn khi bạn thực hiện phân tích dữ liệu.

Đối tượng này đã có mặt trong Python một thời gian và vì vậy đối với nhiều bạn, đây sẽ là một bài đánh giá nhanh.

from collections import Counter

Một từ điển truyền thống, nếu thiếu khóa, sẽ phát sinh lỗi khóa. Từ điển của Python sẽ trả lời với lỗi khóa nếu không tìm thấy khóa.

# An empty dictionary
dict = {}

# check for a key in an empty dict
dict['mystring']

# Error message
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-12-1e03564507c6> in <module>
3
4 # check for a key in an empty dict
----> 5 dict['mystring']
6
7 # Error message
KeyError: 'mystring'

Làm cách nào để tránh các ngoại lệ lỗi chính trong trường hợp này?

Bộ đếm là một lớp phụ của từ điển và có hành vi rất giống từ điển, tuy nhiên, nếu bạn tra cứu khóa bị thiếu thay vì tìm lỗi khóa, nó chỉ trả về số không.

# define the counter
c = Counter()


# check for the unavailable key
print(f"Output\n{c['mystring']}")

Đầu ra

0
c['mystring'] += 1
print(f"Output\n{c}")

Đầu ra

Counter({'mystring': 1})

Ví dụ

print(f"Output\n{type(c)}")

Đầu ra

<class 'collections.Counter'>

Các mục thường xuyên xuất hiện nhất trong một trình tự

Một trong những điều thú vị khác về bộ đếm là bạn có thể liệt kê các đồ vật và nó sẽ đếm chúng cho bạn. Nó giúp chúng ta không phải tạo một vòng lặp để tạo bộ đếm của chúng ta.

Counter
('Peas porridge hot peas porridge cold peas porridge in the pot nine days old'.split())

Đầu ra

Counter({'Peas': 1,
'porridge': 3,
'hot': 1,
'peas': 2,
'cold': 1,
'in': 1,
'the': 1,
'pot': 1,
'nine': 1,
'days': 1,
'old': 1})

Những gì tách sẽ làm là lấy chuỗi và chia nó thành một danh sách các từ. Nó phân tách trên khoảng trắng.

“Bộ đếm” sẽ lặp lại danh sách đó và đếm tất cả các từ, cho chúng ta số lượng được hiển thị trong đầu ra.

Ngoài ra, tôi cũng có thể đếm những từ phổ biến nhất trong cụm từ.

Phương thức most_common () sẽ cung cấp cho chúng ta các mục thường xuyên xuất hiện.

count = Counter('Peas porridge hot peas porridge cold peas porridge in the pot nine days old'.split())
print(f"Output\n{count.most_common(1)}")

Đầu ra

[('porridge', 3)]

Ví dụ

print(f"Output\n{count.most_common(2)}")

Đầu ra

[('porridge', 3), ('peas', 2)]

Ví dụ

print(f"Output\n{count.most_common(3)}")

Đầu ra

[('porridge', 3), ('peas', 2), ('Peas', 1)]

Lưu ý rằng nó trả về một danh sách các bộ giá trị. Phần đầu tiên của bộ từ là từ và phần thứ hai là số lượng của nó.

Một tính năng ít được biết đến của các cá thể Bộ đếm là chúng có thể dễ dàng kết hợp bằng cách sử dụng các phép toán khác nhau.

string = 'Peas porridge hot peas porridge cold peas porridge in the pot nine days old'
another_string =
'Peas peas hot peas peas peas cold peas'

a = Counter(string.split())
b = Counter(another_string.split())


# Add counts
add = a + b
print(f"Output\n{add}")

Đầu ra

Counter({'peas': 7, 'porridge': 3, 'Peas': 2, 'hot': 2, 'cold': 2, 'in': 1, 'the': 1, 'pot': 1, 'nine': 1, 'days': 1, 'old': 1})
# Subtract counts
sub = a - b
print(f"Output\n{sub}")

Đầu ra

Counter({'porridge': 3, 'in': 1, 'the': 1, 'pot': 1, 'nine': 1, 'days': 1, 'old': 1})

Cuối cùng, Counter rất thông minh trong cách nó lưu trữ dữ liệu trong một vùng chứa.

Như bạn có thể thấy ở trên, nó nhóm các từ lại với nhau khi lưu trữ cho phép chúng tôi kết hợp chúng lại với nhau, thường được gọi là một tập hợp nhiều loại.

Chúng ta có thể kéo từng từ một bằng cách sử dụng các phần tử. Nó không nhớ thứ tự nhưng đặt tất cả các từ trong một cụm từ cùng nhau.

Ví dụ

print(f"Output\n{list(a.elements())}")

Đầu ra

['Peas', 'porridge', 'porridge', 'porridge', 'hot', 'peas', 'peas', 'cold', 'in', 'the', 'pot', 'nine', 'days', 'old']

Ví dụ

print(f"Output\n{list(a.values())}")

Đầu ra

[1, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1]

Ví dụ

print(f"Output\n{list(a.items())}")

Đầu ra

[('Peas', 1), ('porridge', 3), ('hot', 1), ('peas', 2), ('cold', 1), ('in', 1), ('the', 1), ('pot', 1), ('nine', 1), ('days', 1), ('old', 1)]