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

Phân loại danh sách theo độ dài chuỗi trong Python


Xét một danh sách chứa nhiều chuỗi độ dài khác nhau. Trong bài này, ta sẽ thấy cách gom nhóm các phần tử thành các nhóm mà trong mỗi nhóm các chuỗi có độ dài bằng nhau.

Với vòng lặp for

Ta thiết kế vòng lặp for lặp qua từng phần tử của danh sách và gán nó chỉ vào danh sách nơi độ dài khớp với độ dài phần tử hiện có.

Ví dụ

listA = ['Monday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
# Danh sách cho trước
print("Danh sách cho trước : \n", listA)
# Phân loại theo độ dài chuỗi
len_comp = lambda x, y: len(x) == len(y)
res = []
for sub_list in listA:
    ele = next((i for i in res if len_comp(sub_list, i[0])), [])
    if ele == []:
        res.append(ele)
    ele.append(sub_list)
# Kết quả
print("Danh sách sau khi tạo nhóm : \n", res)

Kết quả

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

Danh sách cho trước : ['Monday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
Danh sách sau khi tạo nhóm : [['Monday', 'Friday', 'Sunday'], ['Thursday', 'Saturday']]

Với sort và groupby

Trong cách này, ta trước sắp xếp tất cả phần tử theo độ dài, sau đó áp dụng hàm groupby từ mô-đun itertools.

Ví dụ

from itertools import groupby
listA = ['Monday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
# Danh sách cho trước
print("Danh sách cho trước : \n", listA)
# Phân loại theo độ dài chuỗi
get_len = lambda x: len(x)
sub_list = sorted(listA, key=get_len)
res = [list(ele) for i, ele in groupby(sub_list, get_len)]
# Kết quả
print("Danh sách sau khi tạo nhóm : \n", res)

Kết quả

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

Danh sách cho trước : ['Monday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
Danh sách sau khi tạo nhóm : [['Monday', 'Friday', 'Sunday'], ['Thursday', 'Saturday']]