Phân tích dữ liệu ném ra tình huống phức tạp nơi dữ liệu cần được xé toạc, di chuyển. Trong bối cảnh này, hãy xem cách lấy một danh sách lớn và tách nó thành nhiều danh sách con theo yêu cầu. Bài viết này khám phá các cách tiếp cận để đạt được điều này.
Sử dụng zip và vòng lặp for
Trong cách này, ta dùng cắt danh sách (list slicing) để lấy phần tử từ điểm cần tách. Sau đó dùng zip và vòng lặp for để tạo các danh sách con bằng vòng lặp for.
Ví dụ
Alist = ['Mon', 'Tue', 'Wed', 6, 7, 'Thu', 'Fri', 11, 21, 4] # Các chỉ mục tách tại split_points = [2, 5, 8] # Danh sách cho trước print("Danh sách cho trước : " + str(Alist)) # Tách tại print("Các điểm tách : ",split_points) # Thực hiện tách split_list = [Alist[i: j] for i, j in zip([0] + split_points, split_points + [None])] # in kết quả print("Các danh sách tách : ", split_list) Kết quả
Chạy mã trên cho kết quả sau −
Danh sách cho trước : ['Mon', 'Tue', 'Wed', 6, 7, 'Thu', 'Fri', 11, 21, 4] Các điểm tách : [2, 5, 8] Các danh sách tách : [['Mon', 'Tue'], ['Wed', 6, 7], ['Thu', 'Fri', 11], [21, 4]]
Sử dụng chain và zip
Hàm chain tạo iterator trả về phần tử từ iterable đầu tiên cho đến khi cạn kiệt. Vì vậy, nó đánh dấu các điểm tách. Sau đó ta dùng hàm zip để đóng gói kết quả tách thành các danh sách con.
Ví dụ
from itertools import chain Alist = ['Mon', 'Tue', 'Wed', 6, 7, 'Thu', 'Fri', 11, 21, 4] # Các chỉ mục tách tại split_points = [2, 5, 8] # Danh sách cho trước print("Danh sách cho trước : ", str(Alist)) # Tách tại print("Các điểm tách : ",split_points) # để thực hiện tách danh sách tùy chỉnh sublists = zip(chain([0], split_points), chain(split_points, [None])) split_list = list(Alist[i : j] for i, j in sublists) # in kết quả print("Các danh sách tách : ", split_list) Kết quả
Chạy mã trên cho kết quả sau −
Danh sách cho trước : ['Mon', 'Tue', 'Wed', 6, 7, 'Thu', 'Fri', 11, 21, 4] Các điểm tách : [2, 5, 8] Các danh sách tách : [['Mon', 'Tue'], ['Wed', 6, 7], ['Thu', 'Fri', 11], [21, 4]]