You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现数据分块:首块较大剩余块均等,附Python代码修改需求

数据集分块代码修改方案

你原有代码存在以下问题,不符合需求:

  • 最终返回值仅包含剩余部分的分块,完全丢失了首个大尺寸块
  • 首个块大小被设置为size//2,反而比后续分块更小,和「首块尺寸更大」的要求相反
  • 剩余数据切分的索引起始位置错误,会和首块数据产生重叠
  • 剩余数据无法整除分块大小时会丢失尾部数据
  • 参数校验抛出的异常类型错误,参数值非法应该抛出ValueError而非TypeError

修改后可直接使用的代码

def chunk_data(dataset, first_chunk_size=15, rest_chunk_size=10):
    """
    数据集分块:首个块尺寸更大,剩余数据切分为大小均等的块
    :param dataset: 待分块的可索引数据集
    :param first_chunk_size: 首个块的大小,需大于rest_chunk_size
    :param rest_chunk_size: 剩余部分每个块的大小
    """
    total_len = len(dataset)
    # 参数合法性校验
    if first_chunk_size >= total_len:
        raise ValueError("first_chunk_size must be less than total length of dataset")
    if rest_chunk_size <= 0:
        raise ValueError("rest_chunk_size must be greater than 0")
    if first_chunk_size <= rest_chunk_size:
        raise ValueError("first_chunk_size must be larger than rest_chunk_size to meet the requirement")
    
    # 切首个大尺寸块
    chunks = [dataset[:first_chunk_size]]
    rest_data = dataset[first_chunk_size:]
    rest_len = len(rest_data)
    
    # 计算剩余部分的分块数量,向上取整避免丢失数据
    num_rest_chunks = (rest_len + rest_chunk_size - 1) // rest_chunk_size
    
    # 切分剩余部分,起始位置偏移首块长度,避免重叠
    for i in range(num_rest_chunks):
        start = i * rest_chunk_size
        end = start + rest_chunk_size
        chunks.append(rest_data[start:end])
    
    return chunks

功能验证示例

# 测试:总长度100的数据集,首块20,剩余每个块10
test_data = list(range(100))
result = chunk_data(test_data, first_chunk_size=20, rest_chunk_size=10)
print(len(result)) # 输出9:1个首块 + 8个剩余块
print(len(result[0])) # 输出20:首块符合预期大小
print([len(c) for c in result[1:]]) # 输出全为10:剩余块大小均等

如果你需要剩余块严格大小完全一致(不允许最后一块更小),可以替换剩余分块数量的计算逻辑:

# 严格均等分块,自动调整rest_chunk_size,整除剩余数据长度
num_rest_chunks = 8 # 可自行指定剩余分块数量,或者根据需求计算
rest_chunk_size = rest_len // num_rest_chunks

内容的提问来源于stack exchange,提问作者user4556432

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:42:00