如何按指定宽度将Array转换为二维Array?求优化/内置函数实现
如何将数组按指定宽度分组(优化方案/内置函数实现)
针对把数组 [1,2,3,4,5,6,7] 按宽度3转换为 [[1,2,3],[4,5,6],[7]] 的需求,下面是几种基于内置函数的高效实现方案,比手动写循环更简洁且性能优异:
Python 实现
列表推导式(推荐,简洁高效)
直接用Python内置的切片语法,一行代码生成结果,完全依赖语言原生特性,可读性和性能拉满:
arr = [1,2,3,4,5,6,7] width = 3 result = [arr[i:i+width] for i in range(0, len(arr), width)] # 输出:[[1, 2, 3], [4, 5, 6], [7]]
切片操作是Python底层优化过的,时间复杂度O(n),不需要额外依赖,处理常规数组足够好用。
迭代器方案(适合超大型数组)
如果数组规模极大,用itertools.islice生成迭代器逐批取元素,避免一次性占用大量内存:
from itertools import islice arr = [1,2,3,4,5,6,7] width = 3 arr_iter = iter(arr) result = list(iter(lambda: list(islice(arr_iter, width)), [])) # 输出同上
这种方式不会创建完整的中间数组,内存占用更低,适合处理大数据场景。
JavaScript 实现
切片+循环(直观易懂)
用JS数组内置的slice方法配合循环,逻辑清晰,不会修改原数组:
const arr = [1,2,3,4,5,6,7]; const width = 3; const result = []; for (let i = 0; i < arr.length; i += width) { result.push(arr.slice(i, i + width)); } // 输出:[[1,2,3],[4,5,6],[7]]
reduce 函数式实现(一行风格)
利用JS内置的reduce高阶函数,用函数式编程的方式完成分组:
const arr = [1,2,3,4,5,6,7]; const width = 3; const result = arr.reduce((groups, item, index) => { const groupIndex = Math.floor(index / width); groups[groupIndex] = [...(groups[groupIndex] || []), item]; return groups; }, []); // 输出同上
这些方案都避免了手动写复杂的计数、拼接逻辑,直接复用语言内置的高效方法,既减少了代码量,也降低了出错概率。
内容的提问来源于stack exchange,提问作者javapedia.net
相关产品推荐
相关产品推荐

