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

2024-09-26 22:49:45 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将2元素(含x元素)数组转换为2*x元素数组

使用以下示例=>;如何将中的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循环和循环,直到我得到我想要的,但是有更好的方法吗

可能相关:
How do I concatenate two lists in Python?
How to make a flat list out of list of lists


Tags: of方法gt元素示例forlen数组
3条回答

像这样的

bbb2 = sum(bbb, [])

是一种方法,通过(ab)使用sum只关心是否支持加法(对于列表来说是串联)。但它很可能会“输”给一个适当的列表理解性能(也许是清晰度),例如:

bbb2 = [xi for xo in bbb for xi in xo]

“循环”变量xixo应该重命名为taste

对于您的示例数组来说,这并不能提高性能。但是,如果传入的列表具有任意维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))

你可以用列表理解:

>>> bbb2 = [item for sublist in bbb for item in sublist]
>>> bbb2
>>> [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]

这可能与numpy,但我不确定

相关问题 更多 >

    热门问题