Tách danh sách theo chỉ mục Python

Lưu ý rằng không phải lúc nào cũng có thể tạo danh sách trong đó các đoạn có độ dài bằng nhau. Điều này là do các phần tử danh sách có thể không chia đều cho N khối

Tách danh sách theo chỉ mục Python

Đây là hướng dẫn toàn diện để chia danh sách thành N khối trong Python. Trong trường hợp bạn đang tìm kiếm một giải pháp nhanh chóng, tôi chắc chắn những điều trên sẽ làm được. Nhưng nếu bạn đang học Python, hãy nhớ đọc toàn bộ hướng dẫn để tìm ra nhiều cách tiếp cận để chia danh sách thành nhiều phần. Ý tưởng của hướng dẫn này không phải là sử dụng giải pháp hiện có mà là tự thực hiện logic

Hãy nhảy vào nó

1. Phương pháp lặp

Dưới đây là một ví dụ về cách chia danh sách Python thành các phần có kích thước bằng nhau bằng cách sử dụng trình vòng lặp và từ khóa suất

def split_list(lst, chunk_size):
    for i in range(0, len(lst), chunk_size):
        yield lst[i:i+chunk_size]

# Example usage
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
chunk_size = 3

for chunk in split_list(lst, chunk_size):
      print(chunk)

Mã này sẽ xuất ra như sau

[1, 2, 3]
[4, 5, 6]
[7, 8, 9]

Hãy xem xét kỹ hơn mã

Hàm

def split_list(lst, chunk_size):
    for i in range(0, len(lst), chunk_size):
        yield lst[i:i+chunk_size]

# Example usage
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
chunk_size = 3

for chunk in split_list(lst, chunk_size):
      print(chunk)
0 nhận hai đối số. một danh sách
def split_list(lst, chunk_size):
    for i in range(0, len(lst), chunk_size):
        yield lst[i:i+chunk_size]

# Example usage
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
chunk_size = 3

for chunk in split_list(lst, chunk_size):
      print(chunk)
1 và một số nguyên
def split_list(lst, chunk_size):
    for i in range(0, len(lst), chunk_size):
        yield lst[i:i+chunk_size]

# Example usage
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
chunk_size = 3

for chunk in split_list(lst, chunk_size):
      print(chunk)
2 chỉ định kích thước của mỗi đoạn. Hàm sử dụng vòng lặp
def split_list(lst, chunk_size):
    for i in range(0, len(lst), chunk_size):
        yield lst[i:i+chunk_size]

# Example usage
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
chunk_size = 3

for chunk in split_list(lst, chunk_size):
      print(chunk)
3 để lặp qua danh sách và tạo ra danh sách con của
def split_list(lst, chunk_size):
    for i in range(0, len(lst), chunk_size):
        yield lst[i:i+chunk_size]

# Example usage
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
chunk_size = 3

for chunk in split_list(lst, chunk_size):
      print(chunk)
1 bắt đầu từ chỉ mục hiện tại và kết thúc tại chỉ mục hiện tại cộng với kích thước khối

Dưới đây là giải thích từng bước về cách hoạt động của mã

  1. Hàm
    def split_list(lst, chunk_size):
        for i in range(0, len(lst), chunk_size):
            yield lst[i:i+chunk_size]
    
    # Example usage
    lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    chunk_size = 3
    
    for chunk in split_list(lst, chunk_size):
          print(chunk)
    
    0 được gọi với danh sách
    def split_list(lst, chunk_size):
        for i in range(0, len(lst), chunk_size):
            yield lst[i:i+chunk_size]
    
    # Example usage
    lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    chunk_size = 3
    
    for chunk in split_list(lst, chunk_size):
          print(chunk)
    
    1 và kích thước đoạn mã
    def split_list(lst, chunk_size):
        for i in range(0, len(lst), chunk_size):
            yield lst[i:i+chunk_size]
    
    # Example usage
    lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    chunk_size = 3
    
    for chunk in split_list(lst, chunk_size):
          print(chunk)
    
    2
  2. Vòng lặp
    def split_list(lst, chunk_size):
        for i in range(0, len(lst), chunk_size):
            yield lst[i:i+chunk_size]
    
    # Example usage
    lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    chunk_size = 3
    
    for chunk in split_list(lst, chunk_size):
          print(chunk)
    
    3 lặp lại danh sách, bắt đầu từ chỉ mục 0 và tăng chỉ mục lên _______0_______2 mỗi lần. Ví dụ: nếu kích thước khối là 3, thì lần lặp đầu tiên sẽ bắt đầu ở chỉ mục 0, lần lặp thứ hai sẽ bắt đầu ở chỉ mục 3, lần lặp thứ ba ở 6, v.v.
  3. Trên mỗi lần lặp lại, từ khóa
    [1, 2, 3]
    [4, 5, 6]
    [7, 8, 9]
    0 xây dựng một danh sách con của
    def split_list(lst, chunk_size):
        for i in range(0, len(lst), chunk_size):
            yield lst[i:i+chunk_size]
    
    # Example usage
    lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    chunk_size = 3
    
    for chunk in split_list(lst, chunk_size):
          print(chunk)
    
    1 bắt đầu từ chỉ mục hiện tại và kết thúc tại chỉ mục hiện tại cộng với kích thước khối. e. g. nếu chỉ mục hiện tại là 0 và kích thước khối là 3, thì danh sách con sẽ là
    [1, 2, 3]
    [4, 5, 6]
    [7, 8, 9]
    2, là ba phần tử của
    def split_list(lst, chunk_size):
        for i in range(0, len(lst), chunk_size):
            yield lst[i:i+chunk_size]
    
    # Example usage
    lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    chunk_size = 3
    
    for chunk in split_list(lst, chunk_size):
          print(chunk)
    
    1
  4. Sau đó, vòng lặp
    def split_list(lst, chunk_size):
        for i in range(0, len(lst), chunk_size):
            yield lst[i:i+chunk_size]
    
    # Example usage
    lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    chunk_size = 3
    
    for chunk in split_list(lst, chunk_size):
          print(chunk)
    
    3 trong mã ví dụ sẽ lặp lại các đoạn được tạo ra bởi
    def split_list(lst, chunk_size):
        for i in range(0, len(lst), chunk_size):
            yield lst[i:i+chunk_size]
    
    # Example usage
    lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    chunk_size = 3
    
    for chunk in split_list(lst, chunk_size):
          print(chunk)
    
    0 và in từng đoạn

Kết quả của tất cả những điều này là một danh sách được chia thành N phần

Nhưng 'năng suất' làm gì trên trái đất?

Cách tiếp cận được giới thiệu trước đây là cách dễ nhất để chia danh sách thành nhiều phần. Nhưng nếu bạn chưa quen với từ khóa và trình vòng lặp

[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
0, thì giải pháp này có thể khiến bạn bối rối

Trong trường hợp bạn quan tâm đến trình vòng lặp, hãy nhớ đọc hướng dẫn đầy đủ này về trình vòng lặp và trình lặp trong Python

Phần tiếp theo hướng dẫn bạn cách thực hiện phương pháp trước đó mà không sử dụng từ khóa

[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
0 mà thay vào đó sử dụng danh sách

2. Đối với phương pháp vòng lặp

Đây là một cách khác để chia danh sách thành nhiều phần trong Python. Cách tiếp cận này sử dụng các vòng lặp và danh sách và do đó thân thiện với người mới bắt đầu hơn một chút so với ví dụ trước

Dưới đây là các bước bạn cần thực hiện

  1. Xác định số khối bạn muốn chia danh sách thành. Hãy gọi số này là
    [1, 2, 3]
    [4, 5, 6]
    [7, 8, 9]
    8
  2. Chia sàn độ dài của danh sách cho
    [1, 2, 3]
    [4, 5, 6]
    [7, 8, 9]
    8 để tìm kích thước của mỗi đoạn (phép chia sàn làm tròn xuống để kích thước khối không phải là. g. 3. 3333 nhưng thay vào đó chỉ là 3). Chúng tôi sẽ gọi số này là
    def split_list(lst, chunk_size):
        for i in range(0, len(lst), chunk_size):
            yield lst[i:i+chunk_size]
    
    # Example usage
    lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    chunk_size = 3
    
    for chunk in split_list(lst, chunk_size):
          print(chunk)
    
    2
  3. Sử dụng hàm
    # Set the number of chunks
    N = 4
    
    # Create a list of numbers
    my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    # Create an empty list to store the chunks
    chunks = []
    
    # Iterate over the elements of the list in groups of N
    for i in range(0, len(my_list), N):
      # Extract each group of N elements as a sublist
      chunk = my_list[i:i + N]
      
      # Append the sublist to the list of chunks
      chunks.append(chunk)
    
    # Print the chunks
    print(chunks)
    
    1 để tạo danh sách các số chỉ định các chỉ mục mà mỗi đoạn sẽ bắt đầu. Nếu danh sách ban đầu có 10 phần tử và bạn muốn chia nó thành 3 phần, danh sách các chỉ mục bắt đầu sẽ là
    # Set the number of chunks
    N = 4
    
    # Create a list of numbers
    my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    # Create an empty list to store the chunks
    chunks = []
    
    # Iterate over the elements of the list in groups of N
    for i in range(0, len(my_list), N):
      # Extract each group of N elements as a sublist
      chunk = my_list[i:i + N]
      
      # Append the sublist to the list of chunks
      chunks.append(chunk)
    
    # Print the chunks
    print(chunks)
    
    2
  4. Sử dụng vòng lặp
    def split_list(lst, chunk_size):
        for i in range(0, len(lst), chunk_size):
            yield lst[i:i+chunk_size]
    
    # Example usage
    lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    chunk_size = 3
    
    for chunk in split_list(lst, chunk_size):
          print(chunk)
    
    3 để lặp lại danh sách các chỉ mục bắt đầu và sử dụng cú pháp
    # Set the number of chunks
    N = 4
    
    # Create a list of numbers
    my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    # Create an empty list to store the chunks
    chunks = []
    
    # Iterate over the elements of the list in groups of N
    for i in range(0, len(my_list), N):
      # Extract each group of N elements as a sublist
      chunk = my_list[i:i + N]
      
      # Append the sublist to the list of chunks
      chunks.append(chunk)
    
    # Print the chunks
    print(chunks)
    
    4 để trích xuất từng đoạn từ danh sách ban đầu

Đây là mã thực hiện các bước đó. Hãy chắc chắn đọc các bình luận để luôn cập nhật nó mọi lúc

# Set the number of chunks
N = 4

# Create a list of numbers
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Create an empty list to store the chunks
chunks = []

# Iterate over the elements of the list in groups of N
for i in range(0, len(my_list), N):
  # Extract each group of N elements as a sublist
  chunk = my_list[i:i + N]
  
  # Append the sublist to the list of chunks
  chunks.append(chunk)

# Print the chunks
print(chunks)

Mã này tạo ra đầu ra sau

[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10]]

2. 1. Danh sách hiểu có thể làm như vậy

Khi bạn xử lý các vòng lặp for, trong một số trường hợp, bạn có thể sử dụng khả năng hiểu danh sách để dọn dẹp mã

Luôn có tranh luận về việc bạn có nên sử dụng khả năng hiểu hay không. Điều này là do việc hiểu danh sách chắc chắn sẽ rút ngắn mã nhưng thực tế có thể khiến mã khó đọc hơn

Dù sao, đây là ví dụ trước sử dụng khả năng hiểu danh sách thay vì vòng lặp for

# Define the input list
input_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Define the chunk size
chunk_size = 3

# Create the output list using a list comprehension
output_list = [input_list[i:i + chunk_size] for i in range(0, len(input_list), chunk_size)]

# Print the output list
print(output_list)

Điều này sẽ tạo ra đầu ra sau

[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]

3. Trong khi lặp lại

Trong các ví dụ trước, bạn đã sử dụng vòng lặp for để chia danh sách thành nhiều phần. Bởi vì bạn có thể sử dụng vòng lặp for, nên chắc chắn bạn cũng có thể làm điều đó với vòng lặp while

Đây là mã trông như thế nào khi sử dụng vòng lặp while

# define the list of elements
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# define the size of the chunks
chunk_size = 3

# create an empty list to store the chunks
chunks = []

# create an index variable to track the current position in the list
index = 0

# loop until the index is larger than the length of the list
while index < len(my_list):
    # get the sublist of the current chunk
    chunk = my_list[index:index+chunk_size]

    # append the chunk to the list of chunks
    chunks.append(chunk)

    # update the index to the next chunk
    index += chunk_size

# print the resulting chunks
print(chunks)

đầu ra

[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]

Giải pháp này tạo một danh sách trống để lưu trữ các khối kết quả và sau đó sử dụng vòng lặp while để lặp lại danh sách ban đầu theo kích thước khối, nối thêm từng đoạn vào danh sách các khối. Biến chỉ mục được sử dụng để theo dõi vị trí hiện tại trong danh sách và được cập nhật ở mỗi lần lặp sang đoạn tiếp theo

4. Sử dụng NumPy để chia thành N Chunks

Trong Python, có một mô-đun khoa học và toán học phổ biến có tên là NumPy mà cộng đồng khoa học Python sử dụng rất nhiều

Nếu bạn đang sử dụng NumPy, bạn có thể sử dụng hàm

# Set the number of chunks
N = 4

# Create a list of numbers
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Create an empty list to store the chunks
chunks = []

# Iterate over the elements of the list in groups of N
for i in range(0, len(my_list), N):
  # Extract each group of N elements as a sublist
  chunk = my_list[i:i + N]
  
  # Append the sublist to the list of chunks
  chunks.append(chunk)

# Print the chunks
print(chunks)
5 để chia danh sách thành nhiều phần. Hàm này lấy danh sách làm đối số đầu tiên và kích thước của các khối làm đối số thứ hai

Lưu ý rằng cách tiếp cận này buộc các phần tử thành N khối. Các giá trị còn lại không được đặt trong đoạn riêng của chúng mà thay vào đó được đẩy vào đoạn cuối cùng

Ví dụ: hãy chia danh sách 10 số thành 3 phần

import numpy as np

# Define the list to be split
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Split the list into chunks of size 3
chunks = np.array_split(my_list, 3)

# Print the resulting chunks
print(chunks)

# Output: [array([1, 2, 3]), array([4, 5, 6]), array([7, 8, 9, 10])]

Lưu ý cách đoạn cuối cùng hiện có 4 phần tử thay vì lấy phần tử phụ và đặt nó vào đoạn riêng của nó