Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Tìm tần suất ký tự cho trước tại mỗi vị trí trong danh sách các danh sách Python


Hãy xem xét tình huống bạn có một danh sách được cấu thành từ các danh sách làm phần tử. Ta quan tâm đến việc tìm tần suất của một ký tự tại các vị trí khác nhau của các danh sách con. Ví dụ dưới đây sẽ làm rõ yêu cầu.

Xét danh sách các danh sách cho trước.

listA = [['a', 'a', 'b'], ['a', 'c', 'b'], ['c', 'a', 'b'], ['c', 'a', 'a']]

Trong danh sách trên, các phần tử là danh sách có 3 phần tử. Nếu xét danh sách con đầu tiên, nó có a,a,b tại vị trí 0,1,2. Tương tự cho danh sách thứ 3 là c,a,b tại 0,1,2. Xét tất cả các danh sách con, ta có thể nói tần suất của a tại vị trí 0 là 2, tại vị trí 1 là 3 và tại vị trí 2 là 1.

Các chương trình dưới đây nhằm tìm các giá trị như vậy cho bất kỳ phần tử nào trong danh sách các danh sách.

Sử dụng pandas

Thư viện pandas được sử dụng rộng rãi cho thao tác dữ liệu bằng cách tạo DataFrame. Vì vậy, ta tạo một DataFrame và lặp qua nó với mệnh đề where để tìm xem giá trị 'a' có hiện diện ở từng vị trí trong DataFrame hay không.

Ví dụ

import pandas as pd # Danh sách các danh sách cho trước listA = [['a', 'a', 'b'], ['a', 'c', 'b'], ['c', 'a', 'b'], ['c', 'a', 'a']] # sử dụng pandas df = pd.DataFrame(listA) res = df.where(df == 'a', 0).where(df != 'a', 1) # Kết quả print("Xuất hiện của 'a' tại vị trí 0,1 và 2\n", res.sum())

Kết quả

Chạy mã trên cho kết quả sau −

Xuất hiện của 'a' tại 0,1 và 2 vị trí 0 2.0 1 3.0 2 1.0

Sử dụng zip

Ta có thể dùng vòng lặp for để lặp qua từng vị trí trong danh sách con trong danh sách và áp dụng hàm zip cho toàn bộ danh sách các danh sách.

Ví dụ

# Danh sách các danh sách cho trước listA = [['a', 'a', 'b'], ['a', 'c', 'b'], ['c', 'a', 'b'], ['c', 'a', 'a']] res = [elem.count('a') for elem in zip(*listA)] # Kết quả print("Xuất hiện của 'a' tại 0,1 và 2 vị trí\n", res)

Kết quả

Chạy mã trên cho kết quả sau −

Xuất hiện của 'a' tại 0,1 và 2 vị trí [2, 3, 1]