Python中如何将一维array转换为每两个元素一组的嵌套array?
异常原因排查
你贴的代码逻辑和实际跑出的结果完全对不上。按照这段while循环的执行逻辑,不管输入数组是什么内容,最终的Yy数组里每个元素都应该是长度为2的嵌套列表,根本不可能出现子列表结构消失、元素是带逗号的拼接字符串的情况。
出现当前的异常输出,基本是两个常见疏漏导致的:
- 数组拆分环节出错。
input.split(',')这步并没有拿到你预期的['a','b','c','d','e','f']一维数组,反而因为输入格式有问题(比如输入带多余转义引号、split的分隔符写错),实际拆分得到的是['a', 'b,c', 'd,e', 'f']这种元素本身带逗号的列表,长度也远达不到6个元素的预期。 - 实际运行的代码和你贴出来的代码有偏差。比如循环里漏了构造子列表的步骤,反而直接把字符串拼接后追加进数组,才会让原本的嵌套结构完全失效。
正确实现方案
你原本的循环逻辑本身是可以实现拆分需求的,只要修正拆分步骤的问题、加上边界兼容即可,示例代码:
# 保证拆分拿到正确的一维输入数组 inputArr = "a,b,c,d,e,f".split(',') i = 0 Yy = [] while i < len(inputArr): # 用切片取元素,避免最后一组元素不足2个时出现索引越界 temp = inputArr[i:i+2] Yy.append(temp) i += 2 # 最终输出就是预期的[['a','b'],['c','d'],['e','f']]
如果需要更简洁的写法,可以用列表推导式配合切片实现,不需要手动写循环:
Yy = [inputArr[i:i+2] for i in range(0, len(inputArr), 2)]
这种写法自带边界兼容:如果原数组长度是奇数,最后一组会自动存储剩余的单个元素,不会触发索引越界报错。
内容的提问来源于stack exchange,提问作者anita shrivastava
相关产品推荐
相关产品推荐

