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

Bộ đếm trong Python?

Bộ đếm là một vùng chứa theo dõi số lần các giá trị tương đương được thêm vào. Lớp truy cập Python là một phần của mô-đun tập hợp và là lớp con của từ điển.

Bộ đếm Python

Chúng ta có thể coi bộ đếm như một bộ sưu tập không có thứ tự các mục trong đó các mục được lưu trữ dưới dạng khóa từ điển và số lượng của chúng là giá trị từ điển.

Số lượng mục trong bộ đếm có thể là số nguyên dương, số không hoặc số nguyên âm. Mặc dù không có giới hạn nào đối với các khóa và giá trị của nó nhưng nói chung các giá trị được dự định là số nhưng chúng tôi cũng có thể lưu trữ các loại đối tượng khác.

Đang khởi tạo

Bộ đếm hỗ trợ ba hình thức khởi tạo. Hàm tạo của nó có thể được gọi với một chuỗi các mục, một từ điển chứa khóa và số lượng hoặc sử dụng các đối số từ khóa ánh xạ tên chuỗi thành số lượng.

import collections
print (collections.Counter(['a', 'b', 'c', 'a', 'b', 'b']))
print (collections.Counter({'a': 2, 'b': 3, 'c':1}))
print(collections.Counter(a=2, b=3, c=1))

Đầu ra từ cả ba hình thức khởi tạo đều giống nhau -

Counter({'b': 3, 'a': 2, 'c': 1})
Counter({'b': 3, 'a': 2, 'c': 1})
Counter({'b': 3, 'a': 2, 'c': 1})

Để tạo một bộ đếm trống, hãy chuyển bộ đếm không có đối số và điền nó qua phương thức cập nhật.

import collections
c = collections.Counter()
print('Initial: ', c)
c.update('abcddcba')
print('Sequence: ', c)
c.update({'a': 1, 'd':5})
print('Dict: ', c)

Đầu ra

Initial: Counter()
Sequence: Counter({'a': 2, 'b': 2, 'c': 2, 'd': 2})
Dict: Counter({'d': 7, 'a': 3, 'b': 2, 'c': 2})

Số lượt truy cập

Sau khi bộ đếm được điền, các giá trị của nó có thể được tìm nạp thông qua API từ điển.

import collections
c = collections.Counter('abcddcba')
for letter in 'abcdef':
   print('%s : %d' %(letter, c[letter]))

Đầu ra

a : 2
b : 2
c : 2
d : 2
e : 0
f : 0

Bộ đếm không tăng KeyError cho các mục không xác định (như các mục e &f mà chúng tôi đã đề cập trong chương trình ở trên). Nếu một giá trị không được nhìn thấy trong đầu vào, thì số lượng của nó là 0 (giống như đối với mục e &f không xác định trong đầu ra ở trên).

Phương thức Elements () trả về một trình lặp tạo ra tất cả các mục mà Bộ đếm đã biết.

import collections
c = collections.Counter('Python Counters')
c['z'] = 0
print(c)
print(list(c.elements()))

Đầu ra

Counter({'t': 2, 'o': 2, 'n': 2, 'P': 1, 'y': 1, 'h': 1, ' ': 1, 'C': 1, 'u': 1, 'e': 1, 'r': 1, 's': 1, 'z': 0})
['P', 'y', 't', 't', 'h', 'o', 'o', 'n', 'n', ' ', 'C', 'u', 'e', 'r', 's']

Thứ tự của các phần tử không cố định và các mục có số lượng nhỏ hơn 0 không được bao gồm.

Để tạo ra các đầu vào chung trong số n đầu vào và số lượng tương ứng của chúng, chúng tôi sử dụng hàm most_common ().

import collections
c = collections.Counter()
texts = '''Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa
qui officia deserunt mollit anim id est laborum.'''
for word in texts:
c.update(word.rstrip().lower())
print("Five most common letters in the texts: ")
for letter, count in c.most_common(5):
print("%s: %7d" %(letter, count))

Đầu ra

Five most common letters in the texts:
i: 42
e: 38
t: 32
o: 29
u: 29

Ví dụ trên đếm các chữ cái xuất hiện trong văn bản (hoặc bạn có thể coi là một tệp) để tạo ra một phân bố tần số, sau đó in ra năm chữ cái phổ biến nhất. Bỏ qua đối số cho most_common () sẽ tạo ra một danh sách tất cả các mục, theo thứ tự tần suất.

Số học

Các bản sao bộ đếm hỗ trợ các phép toán số học và thiết lập để tổng hợp kết quả.

import collections
c1 = collections.Counter(['a', 'b', 'c', 'a' ,'b', 'b'])
c2 = collections.Counter('alphabet')
print('C1: ', c1)
print('C2: ', c2)
print ('\nCombined counts: ')
print(c1 + c2)
print('\nSubtraction: ')
print(c1 - c2)
print('\nIntersection (taking positive minimums): ')
print(c1 & c2)
print('\nUnion (taking maximums): ')
print(c1 | c2)

Đầu ra

C1: Counter({'b': 3, 'a': 2, 'c': 1})
C2: Counter({'a': 2, 'l': 1, 'p': 1, 'h': 1, 'b': 1, 'e': 1, 't': 1})
Combined counts:
Counter({'a': 4, 'b': 4, 'c': 1, 'l': 1, 'p': 1, 'h': 1, 'e': 1, 't': 1})
Subtraction:
Counter({'b': 2, 'c': 1})
Intersection (taking positive minimums):
Counter({'a': 2, 'b': 1})
Union (taking maximums):
Counter({'b': 3, 'a': 2, 'c': 1, 'l': 1, 'p': 1, 'h': 1, 'e': 1, 't': 1})

Mỗi khi bộ đếm mới được tạo ra thông qua một hoạt động, bất kỳ mục nào có số đếm bằng 0 hoặc số âm sẽ bị loại bỏ.