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

基于指定上限值生成固定大小分块列表的更优Python实现咨询

基于指定上限值生成固定大小分块列表的更优Python实现咨询

我现在需要根据一个上限值生成固定大小的分块列表,现有代码可以实现,但想知道有没有更简洁/高效的写法:

cap = 93
chunkSize = 10
chunks = []
while cap > 0: 
    val = chunkSize if cap / chunkSize >= 1 else cap
    chunks.append(val)
    cap -= val

for i, q in enumerate(chunks):
    print(i, q)

预期输出是:

0 10
1 10
2 10
3 10
4 10
5 10
6 10
7 10
8 10
9 3

我已经有可行的解决方案,只是想找更巧妙的实现方式。

首先,你的现有代码逻辑完全没问题,可读性也很好~不过确实有几种更简洁高效的写法,这里给你推荐两个常用的方案:

方案一:整数除法+取模运算(最简洁高效)

利用Python的整数运算特性,直接计算出完整分块的数量和剩余值,不需要循环迭代,代码非常紧凑,而且在cap数值很大时会比循环快得多:

cap = 93
chunkSize = 10
# 生成所有完整的分块
chunks = [chunkSize] * (cap // chunkSize)
# 如果有剩余值,添加到列表末尾
remainder = cap % chunkSize
if remainder:
    chunks.append(remainder)

甚至可以写成一行(可读性稍弱,但足够简洁):

chunks = [chunkSize]*(cap//chunkSize) + ([cap%chunkSize] if cap%chunkSize else [])

方案二:生成器实现(适合超大cap,节省内存)

如果cap特别大(比如百万甚至千万级),不想一次性生成整个列表占用内存,可以用生成器来按需生成每个分块,内存占用更低,也符合Python的迭代器设计习惯:

def generate_chunks(cap, chunk_size):
    while cap > 0:
        # 直接取当前cap和chunk_size的最小值,比你的条件判断更简洁
        current_chunk = min(chunk_size, cap)
        yield current_chunk
        cap -= current_chunk

cap = 93
chunkSize = 10
# 按需转换为列表,或者直接遍历生成器
chunks = list(generate_chunks(cap, chunkSize))

验证结果

不管用哪种方案,最终生成的chunks列表都是[10,10,10,10,10,10,10,10,10,3],执行你原来的遍历打印代码,输出和预期完全一致。

方案对比

  • 你的原有循环写法:逻辑清晰,易于理解,适合小数值场景;
  • 整数除法方案:代码最简洁,运算效率最高,适合大多数场景;
  • 生成器方案:内存占用极低,适合处理超大数值的分块需求。

备注:内容来源于stack exchange,提问作者amrita

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 14:59:35