Chuyển đến nội dung chính

Danh sách: Chia thành khối N phần tử

Trong hướng dẫn này, bạn sẽ làm việc với danh sách và học một cách hiệu quả để chia các danh sách có kích thước tùy ý thành các khối có kích thước cho trước.
· 5 phút đọc

Khám phá cùng AI

Danh sách (list) là cấu trúc dữ liệu dựng sẵn trong Python, lưu trữ các phần tử không đồng nhất và cho phép truy cập hiệu quả đến các phần tử này. Nhiệm vụ đặt ra, chia danh sách thành các khối có kích thước N, là một thực hành phổ biến khi có giới hạn về số lượng phần tử chương trình của bạn có thể xử lý trong một yêu cầu.

Danh sách

Danh sách là cấu trúc dữ liệu có thể chứa các giá trị hoặc phần tử khác nhau bên trong. Ví dụ về phần tử gồm số nguyên, số thực, chuỗi, v.v. Danh sách là kiểu có thể thay đổi (mutable), nghĩa là bạn có thể thay đổi nội dung của danh sách mà không làm thay đổi danh tính của nó. Chúng được viết với dấu ngoặc vuông [ ], và các phần tử bên trong được phân tách bằng dấu phẩy (,). Hãy tạo một danh sách số để chúng ta có thể thao tác...

# Creating a list of 95 numbers
list_numbers = list(range(1, 96))
print(list_numbers)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95]

Hàm range() tạo ra một dãy số. Cú pháp: range([start], stop[, step]) trong đó 'start' và 'step' là tham số tùy chọn. start là số bắt đầu của dãy, stop là số mà dãy tạo ra tới trước số này (không bao gồm số này). step là khoảng cách giữa mỗi số trong dãy. Hàm này đánh chỉ mục từ 0, tức là chỉ mục danh sách bắt đầu từ 0, không phải 1 khi không chỉ định start.

Bây giờ, giả sử bạn cần chia danh sách thành các danh sách nhỏ hơn, mỗi danh sách gồm 5 phần tử.

Một cách để làm điều này là định nghĩa một generator. Generator là một cách tao nhã để định nghĩa một iterator. Iterator là gì? Nói đơn giản — iterator là một đối tượng biết cách tính toán và trả về phần tử tiếp theo trong đối tượng mà bạn đang lặp qua. Bạn có thể đọc thêm về iterator và generator trong Hướng dẫn Python Iterator của DataCamp.

Chúng ta định nghĩa một hàm chứa generator thực sự thực hiện công việc cho chúng ta.

 # Yields successive 'n' sized chunks from list 'list_name'
def create_chunks(list_name, n):
    for i in range(0, len(list_name), n):
        yield list_name[i:i + n]

# Call the 'create_chunks' function to divide the list further into sub-lists of 10 items each
print(list(create_chunks(list_numbers, 10)))

[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27, 28, 29, 30], [31, 32, 33, 34, 35, 36, 37, 38, 39, 40], [41, 42, 43, 44, 45, 46, 47, 48, 49, 50], [51, 52, 53, 54, 55, 56, 57, 58, 59, 60], [61, 62, 63, 64, 65, 66, 67, 68, 69, 70], [71, 72, 73, 74, 75, 76, 77, 78, 79, 80], [81, 82, 83, 84, 85, 86, 87, 88, 89, 90], [91, 92, 93, 94, 95]]

Một cách khác để làm điều tương tự là chỉ dùng list comprehension. Bạn có thể đọc thêm trong Hướng dẫn Python List Comprehension của DataCamp.

print([list_numbers[i: i+10] for i in range(0, len(list_numbers), 10)])

[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27, 28, 29, 30], [31, 32, 33, 34, 35, 36, 37, 38, 39, 40], [41, 42, 43, 44, 45, 46, 47, 48, 49, 50], [51, 52, 53, 54, 55, 56, 57, 58, 59, 60], [61, 62, 63, 64, 65, 66, 67, 68, 69, 70], [71, 72, 73, 74, 75, 76, 77, 78, 79, 80], [81, 82, 83, 84, 85, 86, 87, 88, 89, 90], [91, 92, 93, 94, 95]]

Khi vấn đề trở nên phức tạp hơn, các biểu thức list comprehension có thể ngày càng khó hiểu và khó gỡ lỗi. Vì vậy, viết một hàm gọn gàng như dùng generator có thể hữu ích hơn và dễ theo dõi hơn.

Trong hướng dẫn này, bạn đã học hai cách để giải quyết một vấn đề khá thường gặp khi làm việc với danh sách. Xem khóa học Kiểu dữ liệu cho Khoa học Dữ liệu của DataCamp.

Chủ đề

Liên quan