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

Ruby中将一维数组按固定长度拆分转换为二维数组的最优方法

嘿,这个分组需求挺常见的,我给你几个Python里高效又简洁的实现方案,都是日常处理这类问题的常用手法:

方法1:列表推导式(最直观易读)

这应该是最容易理解的写法,利用切片和步长遍历原数组,每次取两个元素组成子列表:

s = ["Abc", 123, "Abc", 123, "Abc", 123, "Abc", 123, "Abc", 123]
array = [s[i:i+2] for i in range(0, len(s), 2)]

原理很简单:range(0, len(s), 2)会生成0、2、4...这样的索引,每次从i开始取到i+2的切片(左闭右开),刚好把原数组按每两个元素一组拆分。这种写法速度快,而且一眼就能看懂逻辑,非常适合你的场景。

方法2:zip函数(代码更简洁)

如果你想让代码更短,可以用zip配合切片来实现:

s = ["Abc", 123, "Abc", 123, "Abc", 123, "Abc", 123, "Abc", 123]
array = list(zip(s[::2], s[1::2]))

这里s[::2]会取出原数组中所有偶数索引的元素(也就是每一组的第一个元素"Abc"),s[1::2]取出所有奇数索引的元素(每一组的第二个元素123),zip会把这两个序列里的元素一一配对,最后转成列表就得到了你要的二维数组。注意:如果原数组长度是奇数,zip会自动截断到较短的序列长度,不过你的数组长度是偶数,完全不用担心这个问题。

方法3:itertools分组工具(通用场景首选)

如果以后你需要处理更灵活的分组(比如每组3个元素,或者原数组长度可能为奇数),可以用itertools里的分组技巧:

from itertools import zip_longest

def grouper(iterable, n, fillvalue=None):
    args = [iter(iterable)] * n
    return zip_longest(*args, fillvalue=fillvalue)

s = ["Abc", 123, "Abc", 123, "Abc", 123, "Abc", 123, "Abc", 123]
array = list(grouper(s, 2))

这个grouper函数是Python官方文档里推荐的通用分组方法,n指定每组的元素个数,fillvalue可以设置当原数组长度不是n的倍数时的填充值。不过对于你现在的简单场景,前两种方法更轻量,不需要额外导入模块。

总结

如果只看你的需求,列表推导式是最优选择——既直观又高效,不需要依赖任何额外模块;如果追求代码极简,zip的写法也非常棒。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:18:25