如何将 2 元素(带有 x 元素)数组转换为 2*x elelment 数组?



如何将 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]

"循环"变量xixo应重命名为口味。

你可以用列表理解来做到这一点:

>>> 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))