插件窝 干货文章 如何用NumPy高效分割列表成等长子列表?

如何用NumPy高效分割列表成等长子列表?

数组 列表 array 分割 332    来源:    2025-03-14

在NumPy中,你可以使用numpy.array_split函数来高效地将一个列表分割成多个等长的子列表。这个函数允许你将数组或列表分割成指定数量的子数组,即使原始数组的长度不能被整除,它也会尽可能均匀地分配元素。

以下是一个示例,展示如何使用numpy.array_split来分割列表:

import numpy as np

# 原始列表
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 将列表转换为NumPy数组
array = np.array(data)

# 指定要分割成的子列表数量
num_splits = 3

# 使用array_split进行分割
sub_arrays = np.array_split(array, num_splits)

# 输出结果
for sub_array in sub_arrays:
    print(sub_array.tolist())

输出结果将是:

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

在这个例子中,原始列表被分割成了3个子列表,每个子列表的长度尽可能相等。

关键点:

  • numpy.array_split 允许你将数组或列表分割成指定数量的子数组。
  • 即使原始数组的长度不能被整除,array_split 也会尽可能均匀地分配元素。
  • 结果是一个包含子数组的列表,每个子数组都是一个NumPy数组。你可以使用.tolist()方法将它们转换回Python列表。

其他方法:

如果你不需要使用NumPy,也可以使用Python内置的列表切片来实现类似的功能:

def split_list(lst, n):
    k, m = divmod(len(lst), n)
    return [lst[i * k + min(i, m):(i + 1) * k + min(i + 1, m)] for i in range(n)]

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
num_splits = 3
sub_lists = split_list(data, num_splits)

for sub_list in sub_lists:
    print(sub_list)

输出结果与之前相同:

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

这种方法不需要依赖NumPy,但numpy.array_split在处理大型数组时通常更高效。