Trong hướng dẫn này, ta viết chương trình gom nhóm các chuỗi con tương tự từ một list. Xem ví dụ để hiểu rõ hơn.
Đầu vào
strings = ['tutorials-python', 'tutorials-c', 'tutorials-java', 'tutorials-javascript', 'python-1', 'python-2', 'javascript-1']
Đầu ra
[['tutorials-python', 'tutorials-c', 'tutorials-java', 'tutorials-javascript'], ['python-1', 'python-2'], ['javascript-1']]
Ta dùng phương thức groupby từ mô-đun itertools giải quyết vấn đề. groupby gom tất cả chuỗi tương tự vào đối tượng iter. Với list cho trước, ta tách chuỗi bằng dấu - và truyền phần đầu tiên cho phương thức groupby.
Các bước giải quyết:
- Khởi tạo list chuỗi.
- Import mô-đun itertools.
- Khởi tạo list rỗng.
- Truyền chuỗi và hàm lambda cho itertools.groupby.
- Hàm lambda trả về phần đầu chuỗi sau tách bằng -.
- groupby trả về list các tuple với phần tử và nhóm của nó.
- Mỗi lần lặp, chuyển nhóm phần tử tương tự thành list.
- Thêm list vào list rỗng.
- In kết quả.
Ví dụ
# Import mô-đun itertools
import itertools
# Khởi tạo chuỗi
strings = ['tutorials-python', 'tutorials-c', 'tutorials-java', 'tutorials-javascript', 'python-1', 'python-2', 'javascript-1']
# List rỗng
result = []
# Iterator
# Hàm lambda trả về phần đầu từ chuỗi
iterator = itertools.groupby(strings, lambda string: string.split('-')[0])
# Lặp qua kết quả
# Phần tử và nhóm của nó
for element, group in iterator:
# Thêm nhóm chuyển thành list
result.append(list(group))
# In kết quả
print(result) Kết quả
Nếu chạy mã trên, bạn sẽ nhận được kết quả sau.
[['tutorials-python', 'tutorials-c', 'tutorials-java', 'tutorials-javascript'], ['python-1', 'python-2'], ['javascript-1']]
Kết luận
Nếu có thắc mắc trong hướng dẫn, hãy đề cập ở phần bình luận.