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

Thêm số lần xuất hiện của mỗi số thành danh sách con trong Python


Ta có danh sách các phần tử số. Nhiều phần tử xuất hiện nhiều lần. Ta muốn tạo danh sách con chứa tần suất của mỗi phần tử cùng với chính phần tử đó.

Với for và append

Trong cách này, ta so sánh mỗi phần tử trong list với mọi phần tử sau nó. Nếu khớp, biến đếm tăng và cả phần tử lẫn số đếm thành danh sách con. List kết quả chứa các danh sách con cho thấy mỗi phần tử và tần suất.

Ví dụ

def occurrences(list_in):
    for i in range(0, len(listA)):
        a = 0
        row = []
        if i not in listB:
            for j in range(0, len(listA)):
                # khớp phần tử từ cả hai vị trí
                if listA[i] == listA[j]:
                    a = a + 1
                row.append(listA[i])
                row.append(a)
                listB.append(row)
            # Loại bỏ mục list lặp lại
            for j in listB:
                if j not in list_uniq:
                    list_uniq.append(j)
            return list_uniq
# Mã gọi
listA = [13, 65, 78, 13, 12, 13, 65]
listB = []
list_uniq = []
print("Số lần xuất hiện của mỗi phần tử trong danh sách:\n")
print(occurrences(listA))

Kết quả

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

Số lần xuất hiện của mỗi phần tử trong danh sách: [[13, 3], [65, 2], [78, 1], [12, 1]]

Với Counter

Ta dùng phương thức Counter từ mô-đun collections. Nó cho số lượng mỗi phần tử trong list. Sau đó khai báo list rỗng mới và thêm cặp key-value cho mỗi mục dưới dạng phần tử và số đếm vào list mới.

Ví dụ

from collections import Counter
def occurrences(list_in):
    c = Counter(listA)
    new_list = []
    for k, v in c.items():
        new_list.append([k, v])
    return new_list
listA = [13, 65, 78, 13, 12, 13, 65]
print("Số lần xuất hiện của mỗi phần tử trong danh sách:\n")
print(occurrences(listA))

Kết quả

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

Số lần xuất hiện của mỗi phần tử trong danh sách: [[13, 3], [65, 2], [78, 1], [12, 1]]