Làm cách nào để đếm số lần một chữ cái xuất hiện trong chuỗi python?

Đây là hai ví dụ phổ biến. Trong hướng dẫn này, chúng ta sẽ xem xét kỹ hơn về đếm trong Python và xem thêm các trường hợp sử dụng ví dụ khác

Cách đếm các phần tử trong danh sách bằng Python

Danh sách Python có phương thức tích hợp sẵn count[]. Nó tuân theo cú pháp

list.count[value]

Phương thức này lặp qua danh sách và đếm xem có bao nhiêu phần tử bằng với giá trị

Ví dụ: hãy đếm xem từ “hi” xuất hiện bao nhiêu lần trong một danh sách

words = ["hi", "hi", "hello", "bye"]

n_hi = words.count["hi"]

print[n_hi]

đầu ra

2

Cách đếm các phần tử trong Tuple bằng Python

Bộ dữ liệu Python có phương thức đếm [] tích hợp. Điều này hoạt động giống như phương thức đếm [] của danh sách

tuple.count[value]

Phương thức này lặp qua bộ dữ liệu và đếm xem có bao nhiêu phần tử khớp với giá trị đã cho

Ví dụ: hãy đếm xem có bao nhiêu lần "xin chào" xuất hiện trong một bộ dữ liệu

words = "hi", "hi", "hello", "bye"

n_hello = words.count["hello"]

print[n_hello]

đầu ra

1

Cách đếm các chuỗi con trong một chuỗi

Trong Python, một chuỗi cũng có phương thức đếm[]. Bạn có thể sử dụng nó để đếm số lần một ký tự/chuỗi con xuất hiện trong một chuỗi

Trường hợp sử dụng cơ bản tương tự như sử dụng phương thức đếm[] của danh sách

3
0

Nhưng cú pháp đầy đủ cho phương thức đếm[] của một chuỗi là

3
1

Ở đâu

  • chuỗi con là chuỗi bạn muốn tìm số lần xuất hiện cho
  • start_pos là chỉ mục bắt đầu tìm kiếm. Đây là một đối số tùy chọn
  • end_pos là chỉ mục mà quá trình tìm kiếm dừng lại. Đây cũng là một đối số tùy chọn

Hãy xem các thông số này hoạt động như thế nào

chuỗi con

Bạn có thể đếm số chuỗi con phù hợp trong một chuỗi bằng cách sử dụng phương thức đếm[]

Ví dụ: hãy đếm nhiều lần chuỗi con 'is' xuất hiện trong một câu nhất định

3
2

đầu ra

2

start_pos và end_pos

start_pos xác định từ chỉ mục nào để bắt đầu tìm kiếm chuỗi con. end_pos xác định nơi kết thúc tìm kiếm

Ví dụ: hãy đếm số lần "is" xuất hiện trong một chuỗi nhưng hãy bỏ qua 5 ký tự đầu tiên bằng cách chỉ định start_pos 5

3
4

đầu ra

1

Từ “là” xuất hiện hai lần trong chuỗi đầy đủ. Nhưng phương thức count[] trả về 1 vì chúng ta bỏ qua 5 ký tự đầu tiên

Một ví dụ khác, hãy đếm xem chuỗi con “is” xuất hiện lại bao nhiêu lần trong một chuỗi. Lần này hãy bỏ qua 4 ký tự đầu tiên và 9 ký tự cuối cùng. Nói cách khác, hãy đặt start_pos là 4 và end_pos là 9. ______6_______6

đầu ra

3
7Mặc dù từ “is” xuất hiện hai lần nhưng kết quả là chúng tôi nhận được 0 vì chúng tôi chỉ tìm kiếm giữa các ký tự 4 và 9

Tiếp theo, chúng ta hãy xem cách đếm số lần xuất hiện trong từ điển

Cách đếm số lần xuất hiện trong từ điển

Từ điển Python chỉ có thể có một khóa duy nhất. Do đó, việc đếm số lượng khóa cụ thể là vô nghĩa, vì nó luôn là 0 hoặc 1

Nhưng một từ điển có thể chứa nhiều giá trị giống hệt nhau. Để đếm số lượng giá trị cụ thể trong từ điển

  1. Lấy các giá trị của từ điển dưới dạng danh sách
  2. Số cuộc gọi [] trong danh sách

Bạn có thể lấy tất cả các giá trị của từ điển bằng phương thức values[]. Điều này trả về một đối tượng xem. Bạn có thể chuyển đổi đối tượng dạng xem thành danh sách bằng hàm list[]

Ví dụ: hãy đếm xem giá trị 5 xuất hiện bao nhiêu lần trong từ điển

3
8

đầu ra

2

Bây giờ bạn đã học cách sử dụng phương thức count[] trong Python để đếm số lần xuất hiện trong các lần lặp trong Python

Cuối cùng nhưng không kém phần quan trọng, hãy xem qua 2 tác vụ phổ biến liên quan đến việc đếm mà bạn không thể sử dụng phương thức đếm[]

Cách đếm số lượng tệp trong một thư mục bằng Python

Để đếm số lượng tệp trong một thư mục, hãy sử dụng phương thức của mô-đun os

Ví dụ

num_ls = "Hello world".count["l"]

print[num_ls]
0

Cách đếm số dòng trong tệp văn bản bằng Python

Để đếm số dòng trong một tệp văn bản

  1. Mở tập tin
  2. Đọc dòng tệp bằng phương thức
  3. Đếm số dòng kết quả từ việc chia tách
num_ls = "Hello world".count["l"]

print[num_ls]
1

Phần kết luận

Hôm nay, bạn đã học về đếm trong Python

Phương thức đếm [] là một tiện ích tích hợp cho danh sách, bộ dữ liệu và chuỗi. Nó có thể được sử dụng để đếm số lần một mục cụ thể xuất hiện trong chuỗi

Gần đây, tôi cần đếm số lần các ký tự xuất hiện trong một câu cụ thể. Khi tôi đang học Python vào thời điểm đó, đây có vẻ là một cơ hội hoàn hảo để sử dụng nó để giải quyết một vấn đề thực sự và đó là trọng tâm của bài viết này. Đầu tiên, chúng tôi sẽ sử dụng một từ điển để hoàn thành nhiệm vụ này và trong giải pháp thứ hai, chúng tôi sẽ sử dụng mô-đun bộ sưu tập

Trước tiên hãy xử lý chính chuỗi đó. Trước khi chúng tôi sử dụng nó để đếm các phần tử lặp lại trong chuỗi, chúng tôi sẽ sửa đổi nó một chút để loại bỏ bất kỳ ký tự không mong muốn nào và làm cho văn bản bên trong chuỗi không phân biệt chữ hoa chữ thường

my_text = "Winter is coming!".lower[]
my_clean_text = my_text.replace[" ",""].replace["!",""]    

Kiểm tra các dòng trên

  • Dòng 1

    my_text = "Winter is coming!".lower[]
    

    Ở đây chúng tôi đặt câu hoặc bất kỳ chuỗi nào chúng tôi muốn phân tích. Trong trường hợp của chúng tôi, chúng tôi muốn kiểm tra xem một chữ cái trong một chuỗi có bao nhiêu lần mà không cần quan tâm xem chúng là chữ thường hay chữ hoa. Chúng ta có thể đạt được điều này bằng cách sử dụng hàm

    my_text = "Winter is coming!".lower[]
    
    7 trên chuỗi sẽ biến toàn bộ văn bản thành chữ thường. Nếu bạn không muốn điều đó, hãy loại bỏ chức năng
    my_text = "Winter is coming!".lower[]
    
    7

  • Dòng 2

    my_clean_text = my_text.replace[" ",""].replace["!",""]
    

    Trước tiên, bạn có thể muốn xóa mọi ký tự không mong muốn khỏi chuỗi. Nếu muốn đếm tần suất xuất hiện của tất cả các ký tự trong chuỗi, bạn chỉ cần bỏ dòng này đi. Trong trường hợp của chúng tôi, chúng tôi đã xóa khoảng trắng và. ký tự bằng cách sử dụng hàm thay thế chúng bằng một chuỗi rỗng

Bây giờ chúng ta đã dọn dẹp văn bản, hãy tập trung vào chính thuật toán. Trong giải pháp đầu tiên, chúng tôi sẽ sử dụng từ điển mà không cần nhập thêm bất kỳ mô-đun nào

Giải pháp 1 - sử dụng từ điển

Từ điển là bộ sưu tập không có thứ tự, với các cặp khóa-giá trị. Giá trị của một từ điển được truy cập bằng một khóa và vì các khóa là duy nhất nên chúng ta có thể sử dụng chúng để lưu trữ từng ký tự duy nhất trong chuỗi của mình. Vì vậy, ví dụ, với ký tự 'a', từ điển sẽ là

my_text = "Winter is coming!".lower[]
9, v.v. Bằng cách lặp qua từng ký tự, chúng tôi sử dụng từng ký tự đó làm khóa từ điển của mình và tăng giá trị của nó lên 1

Toàn bộ mã trông như thế này

my_text = "Winter is coming!".lower[]
my_clean_text = my_text.replace[" ",""].replace["!",""]    
print["Original text: {}".format[my_text]]
print["Cleaned text: {}".format[my_clean_text]]

#calculate number of times the characters appear in a string
my_dict={}
for i in my_clean_text:
    my_dict[i]=my_dict.get[i,0]+1

print["\nFrequency of characters:"]
#print the characters in descending order from most frequent to least frequent
for j in sorted[my_dict, key=my_dict.get, reverse=True]:
    print[j+":",my_dict[j],"time[s]"]

Có hai phần được đánh dấu trong đoạn mã trên. Cái đầu tiên thực hiện công việc tính toán tần số của các ký tự trong một văn bản, cái còn lại sau đó hiển thị từng ký tự và tần số của nó từ cao nhất đến thấp nhất

Đếm số lần, các ký tự xuất hiện trong một chuỗi

Hãy bắt đầu bằng cách kiểm tra mã cho phần đầu tiên

  • dòng 7

    my_dict={}
    

    Trước tiên chúng tôi tạo một từ điển trống

  • dòng 8

    for i in my_clean_text:
    

    Trong dòng này, chúng tôi lặp qua từng ký tự trong chuỗi

  • Dòng 9

        my_dict[i]=my_dict.get[i,0]+1
    

    Khi đã ở trong vòng lặp, chúng ta có biến

    my_clean_text = my_text.replace[" ",""].replace["!",""]
    
    0 chứa một ký tự từ chuỗi và chúng ta muốn sử dụng nó làm khóa trong từ điển và tăng giá trị của nó lên 1. Vấn đề là nếu khóa chưa tồn tại và chúng tôi truy cập nó, Python sẽ ném KeyError. lỗi, vì vậy chúng tôi không thể chỉ sử dụng
    my_clean_text = my_text.replace[" ",""].replace["!",""]
    
    1 vì nó sẽ không hoạt động

    Để giải quyết vấn đề này, chúng tôi sử dụng chức năng get[] từ điển tích hợp. Tham số thứ nhất yêu cầu một khóa mà chúng ta muốn giá trị từ đó và sau đó hàm trả về giá trị của khóa đó hoặc trong trường hợp không tồn tại, nó sẽ trả về giá trị của tham số thứ 2, trong trường hợp của chúng ta là 0. Sau đó, chúng tôi tăng giá trị của khóa

    my_clean_text = my_text.replace[" ",""].replace["!",""]
    
    2 lên 1

    Ghi chú. Tham số thứ 2 của get[] là tùy chọn, nhưng nó mặc định là Không và vì

    my_clean_text = my_text.replace[" ",""].replace["!",""]
    
    3 sẽ gây ra TypeError. [các] loại toán hạng không được hỗ trợ cho +. Lỗi 'NoneType' và 'int', chúng tôi đặt nó thành giá trị 0.

Chúng tôi kết thúc với một từ điển trong đó mỗi ký tự duy nhất trong một chuỗi được lưu trữ dưới dạng khóa và giá trị chứa một số lần, các ký tự lặp lại trong một chuỗi

In các ký tự theo thứ tự giảm dần

Bây giờ, chúng ta sẽ sắp xếp chúng theo mức độ thường xuyên nhất đến ít thường xuyên nhất bằng cách sử dụng hàm Python tích hợp sẵn

  • Dòng 13

    for j in sorted[my_dict, key=my_dict.get, reverse=True]:
    

    Hàm sắp xếp một chuỗi hoặc một tập hợp và trả về một danh sách mới với các phần tử được sắp xếp trong khi giữ nguyên chuỗi/tập hợp ban đầu và danh sách được trả về này là những gì mà vòng lặp

    my_clean_text = my_text.replace[" ",""].replace["!",""]
    
    4 lặp lại

    Các tham số chức năng như sau

    • chuỗi/bộ sưu tập chúng tôi muốn sắp xếp [bắt buộc]

      Tham số bắt buộc này là bất kỳ đối tượng có thể lặp lại nào [danh sách, bộ dữ liệu, từ điển,. ] chúng tôi muốn sắp xếp và trong trường hợp của chúng tôi, đó là từ điển

      my_clean_text = my_text.replace[" ",""].replace["!",""]
      
      5

    • khóa [tùy chọn, làm đối số từ khóa

      my_clean_text = my_text.replace[" ",""].replace["!",""]
      
      6]

      Với tham số chính, chúng tôi kiểm soát những gì chúng tôi muốn sắp xếp. Trong trường hợp của chúng tôi với từ điển, không đặt tham số khóa, các khóa của từ điển sẽ được sắp xếp, nhưng chúng tôi cần từ điển được sắp xếp theo giá trị. Tham số chính mong đợi một đối tượng hàm và đây là lúc hàm get[] hữu ích. Bằng cách sử dụng

      my_clean_text = my_text.replace[" ",""].replace["!",""]
      
      7, giá trị của mỗi khóa sẽ được sử dụng để sắp xếp

    • đảo ngược [tùy chọn, làm đối số từ khóa

      my_clean_text = my_text.replace[" ",""].replace["!",""]
      
      8]

      Theo mặc định, các phần tử được sắp xếp sẽ được sắp xếp theo thứ tự tăng dần [thấp nhất đến cao nhất]. Với

      my_clean_text = my_text.replace[" ",""].replace["!",""]
      
      9, chúng tôi yêu cầu nó sắp xếp theo thứ tự giảm dần [cao nhất đến thấp nhất]

  • Dòng 14

        print[j+":",my_dict[j],"time[s]"]  
    

    Ở đây, chúng tôi đang hiển thị kết quả của hàm từ dòng 13 trả về danh sách các khóa khi sắp xếp từ điển. Trước tiên, chúng tôi in khóa và sau đó là giá trị của nó, trong trường hợp của chúng tôi là một ký tự duy nhất trong chuỗi và số lần nó xuất hiện trong chuỗi

Ghi chú. Nếu bạn muốn tìm hiểu thêm về từ điển trong Python, hãy xem bài viết toàn diện về chủ đề này.

Tiếp theo, chúng ta sẽ xem xét cách thực hiện cùng một nhiệm vụ mà không cần phải xử lý từ điển, get[] và hàm. Lần này, chúng ta sẽ sử dụng mô-đun bộ sưu tập để thay thế

Giải pháp 2 - sử dụng Bộ đếm trong mô-đun bộ sưu tập

Đối với giải pháp thứ 2, mã hoàn chỉnh trông như thế này

from collections import Counter

my_text = "Winter is coming!"
my_clean_text = my_text.replace[" ",""].replace["!",""]
print["Original text: {}".format[my_text]]
print["Cleaned text: {}".format[my_clean_text]]

#calculate number of times the characters appear in a string
list_of_chars = list[my_clean_text]
cnt = Counter[list_of_chars]
common = cnt.most_common[]

print["\nFrequency of characters:"]
#print the characters in descending order from most frequent to least frequent 
for c in common:
    print[c[0]+":",c[1],"time[s]"]

Hãy đi qua các dòng được đánh dấu

  • Dòng 1

    my_text = "Winter is coming!".lower[]
    
    0

    Đầu tiên, chúng tôi nhập lớp từ mô-đun bộ sưu tập. Mô-đun này là một phần của thư viện python tiêu chuẩn và được bao gồm khi chúng tôi cài đặt Python, vì vậy không cần sử dụng lệnh

    my_text = "Winter is coming!".lower[]
    my_clean_text = my_text.replace[" ",""].replace["!",""]    
    print["Original text: {}".format[my_text]]
    print["Cleaned text: {}".format[my_clean_text]]
    
    #calculate number of times the characters appear in a string
    my_dict={}
    for i in my_clean_text:
        my_dict[i]=my_dict.get[i,0]+1
    
    print["\nFrequency of characters:"]
    #print the characters in descending order from most frequent to least frequent
    for j in sorted[my_dict, key=my_dict.get, reverse=True]:
        print[j+":",my_dict[j],"time[s]"]
    
    0

Cũng như giải pháp thứ nhất, giải pháp này cũng có hai phần chính được đánh dấu. Phần đầu tiên liên quan đến việc đếm các phần tử lặp lại và phần khác hiển thị các ký tự từ số cao nhất đến thấp nhất

Đếm số lần, các ký tự xuất hiện trong một chuỗi

  • Dòng 9

    my_text = "Winter is coming!".lower[]
    
    1

    Từ chuỗi văn bản, chúng ta cần lưu trữ từng ký tự dưới dạng một phần tử trong danh sách và chúng ta thực hiện điều đó bằng cách sử dụng hàm list[] của Python

  • dòng 10

    my_text = "Winter is coming!".lower[]
    
    2

    Sau đó, chúng tôi sử dụng danh sách các ký tự này làm đối số trên đối tượng Bộ đếm từ mô-đun bộ sưu tập. Lớp Counter dùng để đếm các phần tử duy nhất trong danh sách. Đây là mô tả trong tài liệu python chính thức

  • Counter là một lớp con dict để đếm các đối tượng có thể băm. Nó 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 khóa từ điển và số lượng của chúng được lưu trữ dưới dạng giá trị từ điển. Số lượng được phép là bất kỳ giá trị số nguyên nào kể cả số không hoặc số âm. Lớp Counter tương tự như túi hoặc nhiều lớp trong các ngôn ngữ khác

    Mã nguồn của lớp Counter sử dụng từ điển để hoàn thành nhiệm vụ này, tương tự như giải pháp đầu tiên của chúng tôi, nó chỉ ẩn tất cả các chi tiết cấp thấp khỏi chúng tôi

  • Dòng 11

    my_text = "Winter is coming!".lower[]
    
    3

    Cuối cùng, chúng tôi sử dụng phương thức của lớp Counter, trả về một danh sách tất cả các phần tử, được sắp xếp từ phổ biến nhất đến ít phổ biến nhất

In các ký tự theo thứ tự giảm dần

Để hiển thị kết quả, phần này rất giống với phần trong giải pháp đầu tiên, ngoại trừ việc chúng ta không cần phải làm việc với hàm vì chúng ta đã có kết quả được sắp xếp từ tần suất cao nhất đến ít thường xuyên nhất trong dòng 11

  • dòng 15

    my_text = "Winter is coming!".lower[]
    
    4

    Ở đây chúng ta chỉ lặp qua biến chung và nó chứa danh sách các phần tử là các bộ chứa ký tự và số lượng của chúng. Ví dụ: nếu ký tự 'i' được lặp lại trong chuỗi 3 lần, nó sẽ được lưu trữ dưới dạng bộ dữ liệu

    my_text = "Winter is coming!".lower[]
    my_clean_text = my_text.replace[" ",""].replace["!",""]    
    print["Original text: {}".format[my_text]]
    print["Cleaned text: {}".format[my_clean_text]]
    
    #calculate number of times the characters appear in a string
    my_dict={}
    for i in my_clean_text:
        my_dict[i]=my_dict.get[i,0]+1
    
    print["\nFrequency of characters:"]
    #print the characters in descending order from most frequent to least frequent
    for j in sorted[my_dict, key=my_dict.get, reverse=True]:
        print[j+":",my_dict[j],"time[s]"]
    
    1

  • Dòng 16

    my_text = "Winter is coming!".lower[]
    
    5

    Dòng này hiển thị ký tự và giá trị của nó từ một bộ bằng cách sử dụng

    my_text = "Winter is coming!".lower[]
    my_clean_text = my_text.replace[" ",""].replace["!",""]    
    print["Original text: {}".format[my_text]]
    print["Cleaned text: {}".format[my_clean_text]]
    
    #calculate number of times the characters appear in a string
    my_dict={}
    for i in my_clean_text:
        my_dict[i]=my_dict.get[i,0]+1
    
    print["\nFrequency of characters:"]
    #print the characters in descending order from most frequent to least frequent
    for j in sorted[my_dict, key=my_dict.get, reverse=True]:
        print[j+":",my_dict[j],"time[s]"]
    
    2 và
    my_text = "Winter is coming!".lower[]
    my_clean_text = my_text.replace[" ",""].replace["!",""]    
    print["Original text: {}".format[my_text]]
    print["Cleaned text: {}".format[my_clean_text]]
    
    #calculate number of times the characters appear in a string
    my_dict={}
    for i in my_clean_text:
        my_dict[i]=my_dict.get[i,0]+1
    
    print["\nFrequency of characters:"]
    #print the characters in descending order from most frequent to least frequent
    for j in sorted[my_dict, key=my_dict.get, reverse=True]:
        print[j+":",my_dict[j],"time[s]"]
    
    3 để truy cập các phần tử của bộ

Đầu ra của kịch bản

Đầu ra sẽ giống nhau cho cả hai giải pháp và chúng sẽ tạo ra như sau

my_text = "Winter is coming!".lower[]
6

Phần kết luận

Trong bài viết này, chúng tôi muốn đếm số lần, ký tự xuất hiện trong một chuỗi và chúng tôi đã đạt được điều này bằng hai giải pháp. Trong giải pháp đầu tiên, chúng tôi đã sử dụng từ điển trong khi đối với giải pháp thứ 2, chúng tôi đã nhập lớp từ mô-đun bộ sưu tập và sử dụng phương thức của nó

Tôi hy vọng bạn đã tìm thấy bài viết này hữu ích. Nếu bạn có bất kỳ giải pháp thú vị nào khác cho cùng một vấn đề mà bạn muốn chia sẻ, hãy cho tôi biết và tôi có thể thêm nó vào đây

Chủ Đề