CyStack logo
  • Sản phẩm & Dịch vụ
  • Giải pháp
  • Bảng giá
  • Công ty
  • Tài liệu
Vi

vi

Trang chủHướng dẫnCounter trong Python: Cách sử dụng với ví dụ minh họa

Counter trong Python: Cách sử dụng với ví dụ minh họa

CyStack blog 4 phút để đọc
CyStack blog14/09/2025
Locker Avatar

Chris Pham

Technical Writer

Locker logo social
Reading Time: 4 minutes

Lớp Python Counter là một phần của module Collections. Counter là một subclass của Dictionary và được sử dụng để theo dõi các phần tử cùng với số lần xuất hiện của chúng.

Counter trong Python

Counter trong Python

Counter là một bộ sưu tập không có thứ tự, trong đó các phần tử được lưu trữ dưới dạng key của dict và số lần xuất hiện của chúng là value. Số đếm của các phần tử trong Counter có thể là số nguyên dương, 0 hoặc âm. Tuy nhiên, không có giới hạn về key và value của nó. Mặc dù value có mục đích là các số, chúng ta cũng có thể lưu trữ các đối tượng khác.

Tạo đối tượng Python Counter

Chúng ta có thể tạo một counter rỗng hoặc bắt đầu với một số giá trị ban đầu.

from collections import Counter

# empty Counter
counter = Counter()
print(counter)  # Counter()

# Counter with initial values
counter = Counter(['a', 'a', 'b'])
print(counter)  # Counter({'a': 2, 'b': 1})

counter = Counter(a=2, b=3, c=1)
print(counter)  # Counter({'b': 3, 'a': 2, 'c': 1})

Chúng ta cũng có thể sử dụng bất kỳ Iterable (đối tượng lặp) nào làm đối số để tạo đối tượng Counter. Vì vậy, chuỗi ký tự và list cũng có thể được sử dụng để tạo đối tượng Counter.

# Iterable as argument for Counter
counter = Counter('abc')
print(counter)  # Counter({'a': 1, 'b': 1, 'c': 1})

# List as argument to Counter
words_list = ['Cat', 'Dog', 'Horse', 'Dog']
counter = Counter(words_list)
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})

# Dictionary as argument to Counter
word_count_dict = {'Dog': 2, 'Cat': 1, 'Horse': 1}
counter = Counter(word_count_dict)
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})

Như đã đề cập ở trên, chúng ta có thể sử dụng dữ liệu không phải là số cho các giá trị đếm, nhưng điều đó sẽ làm sai mục đích của lớp counter.

# Counter works with non-numbers too
special_counter = Counter(name='Pankaj', age=20)
print(special_counter)  # Counter({'name': 'Pankaj', 'age': 20})

Các phương thức của Python Counter

Hãy cùng xem xét các phương thức của lớp counter và một số thao tác khác mà chúng ta có thể thực hiện trên đó.

Lấy số đếm của các phần tử

# getting count
counter = Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})
countDog = counter['Dog']
print(countDog)  # 2

Nếu chúng ta cố gắng lấy số đếm của một key không tồn tại, nó sẽ trả về 0 chứ không báo lỗi KeyError.

# getting count for non existing key, don't cause KeyError
print(counter['Unicorn'])  # 0

Cài đặt số đếm của các phần tử

Chúng ta cũng có thể đặt số đếm cho một phần tử hiện có trong counter. Nếu phần tử đó không tồn tại, nó sẽ được thêm vào counter.

counter = Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})
# setting count
counter['Horse'] = 0
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Horse': 0})

# setting count for non-existing key, adds to Counter
counter['Unicorn'] = 1
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Unicorn': 1, 'Horse': 0})

Xóa một phần tử khỏi Counter

Chúng ta có thể sử dụng từ khóa del để xóa một phần tử khỏi đối tượng counter.

# Delete element from Counter
del counter['Unicorn']
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Horse': 0})

elements()

Phương thức này trả về danh sách các phần tử trong counter. Chỉ các phần tử có số đếm dương mới được trả về.

counter = Counter({'Dog': 2, 'Cat': -1, 'Horse': 0})

# elements()
elements = counter.elements()  # doesn't return elements with count 0 or less
for value in elements:
    print(value)

Đoạn code trên sẽ in ra “Dog” hai lần vì số đếm của nó là 2. Các phần tử khác sẽ bị bỏ qua vì chúng không có số đếm dương. Counter là một bộ sưu tập không có thứ tự, vì vậy các phần tử được trả về theo bất kỳ thứ tự nào.

most_common(n)

Phương thức này trả về các phần tử phổ biến nhất từ counter. Nếu chúng ta không cung cấp giá trị cho ‘n’, một từ điển đã được sắp xếp từ các phần tử phổ biến nhất đến ít phổ biến nhất sẽ được trả về. Chúng ta có thể sử dụng slicing (cắt lát) để lấy các phần tử ít phổ biến nhất trên từ điển đã sắp xếp này.

counter = Counter({'Dog': 2, 'Cat': -1, 'Horse': 0})

# most_common()
most_common_element = counter.most_common(1)
print(most_common_element)  # [('Dog', 2)]

least_common_element = counter.most_common()[:-2:-1]
print(least_common_element)  # [('Cat', -1)]

subtract() và update()

Phương thức counter.subtract() được sử dụng để trừ số đếm của các phần tử từ một Counter khác. Phương thức update() được sử dụng để cộng thêm số đếm từ một Counter khác.

counter = Counter('ababab')
print(counter)  # Counter({'a': 3, 'b': 3})
c = Counter('abc')
print(c)  # Counter({'a': 1, 'b': 1, 'c': 1})

# subtract
counter.subtract(c)
print(counter)  # Counter({'a': 2, 'b': 2, 'c': -1})

# update
counter.update(c)
print(counter)  # Counter({'a': 3, 'b': 3, 'c': 0})

Các phép toán số học trên Python Counter

Chúng ta có thể thực hiện một số phép toán số học trên counter giống như các con số. Tuy nhiên, chỉ những phần tử có số đếm dương mới được trả về với các phép toán này.

# arithmetic operations
c1 = Counter(a=2, b=0, c=-1)
c2 = Counter(a=1, b=-1, c=2)

c = c1 + c2  # return items having +ve count only
print(c)  # Counter({'a': 3, 'c': 1})

c = c1 - c2  # keeps only +ve count elements
print(c)  # Counter({'a': 1, 'b': 1})

c = c1 & c2  # intersection min(c1[x], c2[x])
print(c)  # Counter({'a': 1})

c = c1 | c2  # union max(c1[x], c2[x])
print(c)  # Counter({'a': 2, 'c': 2})

Các thao tác khác trên Python Counter

Hãy cùng xem một số đoạn mã cho các thao tác khác mà chúng ta có thể thực hiện trên các đối tượng counter.

counter = Counter({'a': 3, 'b': 3, 'c': 0})
# miscellaneous examples
print(sum(counter.values()))  # 6

print(list(counter))  # ['a', 'b', 'c']
print(set(counter))  # {'a', 'b', 'c'}
print(dict(counter))  # {'a': 3, 'b': 3, 'c': 0}
print(counter.items())  # dict_items([('a', 3), ('b', 3), ('c', 0)])

# remove 0 or negative count elements
counter = Counter(a=2, b=3, c=-1, d=0)
counter = +counter
print(counter)  # Counter({'b': 3, 'a': 2})

# clear all elements
counter.clear()
print(counter)  # Counter()

Đó là tất cả về lớp Python Counter.

Bạn có thể tải xuống đoạn mã ví dụ đầy đủ từ GitHub Repository của tôi.

Tham khảo: Python Docs

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất