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']]