Đâ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
30
Nhưng cú pháp đầy đủ cho phương thức đếm[] của một chuỗi là
31
Ở đâ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
32
đầ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
34
đầ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
37Mặ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
- Lấy các giá trị của từ điển dưới dạng danh sách
- 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
38
đầ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
- Mở tập tin
- Đọc dòng tệp bằng phương thức
- Đế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
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ăngmy_text = "Winter is coming!".lower[]
7my_text = "Winter is coming!".lower[]
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 1Toà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
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ụngmy_clean_text = my_text.replace[" ",""].replace["!",""]
1 vì nó sẽ không hoạt độngmy_clean_text = my_text.replace[" ",""].replace["!",""]
Để 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
2 lên 1my_clean_text = my_text.replace[" ",""].replace["!",""]
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ì
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.my_clean_text = my_text.replace[" ",""].replace["!",""]
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
4 lặp lạimy_clean_text = my_text.replace[" ",""].replace["!",""]
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
5my_clean_text = my_text.replace[" ",""].replace["!",""]
khóa [tùy chọn, làm đối số từ khóa
6]my_clean_text = my_text.replace[" ",""].replace["!",""]
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
7, giá trị của mỗi khóa sẽ được sử dụng để sắp xếpmy_clean_text = my_text.replace[" ",""].replace["!",""]
đảo ngược [tùy chọn, làm đối số từ khóa
8]my_clean_text = my_text.replace[" ",""].replace["!",""]
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
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]my_clean_text = my_text.replace[" ",""].replace["!",""]
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
0my_text = "Winter is coming!".lower[]
Đầ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
0my_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ũ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
1my_text = "Winter is coming!".lower[]
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
2my_text = "Winter is coming!".lower[]
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
Dòng 11
3my_text = "Winter is coming!".lower[]
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
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
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
4my_text = "Winter is coming!".lower[]
Ở đâ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
1my_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]"]
Dòng 16
5my_text = "Winter is coming!".lower[]
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
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ộ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]"]
Đầ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[]
6Phầ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