更优的Python列表拆分方法:如何将列表按指定数量灵活分块?
通用列表分块方案
基础实现(适用于中小规模列表)
直接给出可复用的通用函数,无需随分块数量调整代码,支持任意长度的列表和任意分块数:
def split_list(input_list, chunk_num): """ 将输入列表拆分为指定数量的子列表 :param input_list: 待拆分的原始列表 :param chunk_num: 需要拆分的子列表数量 :return: 包含所有子列表的列表 """ avg_chunk_size = len(input_list) // chunk_num remainder = len(input_list) % chunk_num start = 0 chunks = [] for i in range(chunk_num): # 无法整除时,前remainder个块多分配1个元素,避免遗漏 current_size = avg_chunk_size + 1 if i < remainder else avg_chunk_size chunks.append(input_list[start:start+current_size]) start += current_size return chunks
使用示例
如果需要把100个元素的列表拆为5个20元素的子列表,直接调用即可:
list1 = ['boy', 'boy1', ..., 'end'] output_chunks = split_list(list1, 5) # 分别取5个子列表 output1, output2, output3, output4, output5 = output_chunks
你原有代码里手动对每个分块切片、展开的操作完全可以省略,函数直接返回的就是每个子列表本身,没有多余嵌套。
超大列表优化实现(适用于10万级及以上元素)
如果待拆分的列表元素量极大,不需要一次性把所有分块加载到内存,可以用生成器实现,内存占用仅和单个分块大小相关:
def split_list_generator(input_list, chunk_num): avg_chunk_size = len(input_list) // chunk_num remainder = len(input_list) % chunk_num start = 0 for i in range(chunk_num): current_size = avg_chunk_size + 1 if i < remainder else avg_chunk_size yield input_list[start:start+current_size] start += current_size
使用示例
迭代处理每个分块即可,无需存储全部分块:
for chunk in split_list_generator(your_large_list, 100): # 自行添加当前分块的处理逻辑 process(chunk)
方案优势
- 通用适配:修改
chunk_num参数即可调整分块数量,无论分5块还是分1000块都不需要修改函数逻辑 - 边界兼容:自动处理列表长度无法被分块数整除的场景,不会丢失元素
- 效率极高:时间复杂度为O(n),和原列表长度线性相关,远优于手动逐个赋值的写法
内容的提问来源于stack exchange,提问作者CodingStark
相关产品推荐
相关产品推荐

