如何将序列数字按每50个一组拆分生成嵌套列表?
按每50个一组拆分数字范围为嵌套列表的最优实现方法
核心思路
实现需求的核心是按固定步长遍历数字范围,同时处理最后一组的边界情况:
- 按50的步长确定每组的起始值
- 结束值取当前组理论结束值(起始值+49)和范围最大值的较小值,避免超出边界
- 遍历所有组,将每组的范围存入嵌套列表
Python 实现示例
def split_range(start, end, chunk_size=50): result = [] current_start = start while current_start <= end: current_end = min(current_start + chunk_size - 1, end) # 如果需要生成完整数字列表 result.append(list(range(current_start, current_end + 1))) # 若仅需范围标识(如[1..50]格式),可替换为元组或字符串: # result.append((current_start, current_end)) current_start = current_end + 1 return result # 测试示例 print(split_range(1, 112)) # 输出:[[1, 2, ..., 50], [51, ..., 100], [101, ..., 112]]
为什么这是最优方法
- 时间复杂度极低:仅需遍历组数(如112的情况仅3次循环),时间复杂度为O(k)(k为组数),性能可以忽略损耗
- 边界处理严谨:通过
min()函数完美覆盖最后一组不足50个的场景 - 扩展性强:通过参数
chunk_size可灵活调整每组大小,适配不同拆分需求
JavaScript 实现示例
function splitRange(start, end, chunkSize = 50) { const result = []; let currentStart = start; while (currentStart <= end) { const currentEnd = Math.min(currentStart + chunkSize - 1, end); // 生成完整数字数组 const chunk = Array.from({length: currentEnd - currentStart + 1}, (_, i) => currentStart + i); result.push(chunk); currentStart = currentEnd + 1; } return result; } // 测试 console.log(splitRange(1, 112));
内容的提问来源于stack exchange,提问作者Dhananjaya D N
相关产品推荐
相关产品推荐

