如何将 2 元素(带有 x 元素(数组转换为 2*x elelment 数组?
使用以下示例 =>如何将bbb
转换为bbb2
>>> bbb
[[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]
>>> bbb2
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
>>> len(bbb)
2
>>> len(bbb2)
4
我正在考虑一个 for 循环并循环播放,直到我得到我想要的东西,但有更好的方法吗?
可能相关:
如何在 Python 中连接两个列表?
如何从列表列表中制作平面列表
类似
bbb2 = sum(bbb, [])
是一种方式,通过(ab(使用sum
只关心是否支持添加的事实(对于列表来说,这是串联(。 但它很可能会"输给"适当的列表理解性能(也许是清晰度(,例如:
bbb2 = [xi for xo in bbb for xi in xo]
"循环"变量xi
,xo
应重命名为口味。
你可以用列表理解来做到这一点:
>>> bbb2 = [item for sublist in bbb for item in sublist]
>>> bbb2
>>> [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
使用numpy可能是可能的,但我不确定。
对于您的示例数组来说,这不会是更好的性能。但是,如果您的传入列表是任意维度 N*M,那么您可以创建一个通用递归函数。
代码示例:
bbb = [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]
def generic_recursive(thelist, res):
"""
Generic Recursive Function
Converting Array of Dim = n arrays to dim 2
"""
if not thelist:
return res
else:
if isinstance(thelist[0], int):
res.append(thelist)
return generic_recursive([], res)
else:
res.extend( generic_recursive(thelist[0], []))
return generic_recursive(thelist[1:], res)
bbb2 = generic_recursive(bbb,[])
print(bbb)
print(bbb2)
print(len(bbb))
print(len(bbb2))