如何在不同长度的列表中删除嵌套的最内层


问题内容

我正在尝试删除单元素长度列表的列表中最里面的嵌套。您是否知道一种相对简单的方法(转换为NumPy数组就可以了):

[[[1], [2], [3], [4], [5]], [[6], [7], [8]], [[11], [12]]]

为此?:

[[1, 2, 3, 4, 5], [6, 7, 8], [11, 12]]

另外,我尝试这样做的实列表包含日期时间对象,而不是示例中的int。列表的初始集合将具有不同的长度。

或者,如果原始列表中有nan,那也可以,只要在输出列表中不存在nan,每个列表的长度是相同的。即

[[[1], [2], [3], [4], [5]], 
 [[6], [7], [8], [nan], [nan]], 
 [[11], [12], [nan], [nan], [nan]]]

对此:

[[1, 2, 3, 4, 5], [6, 7, 8], [11, 12]]

问题答案:

如果嵌套始终是一致的,那么这很简单:

In [2]: import itertools

In [3]: nested = [ [ [1],[2],[3],[4], [5] ], [ [6],[7],[8] ] , [ [11],[12] ] ]

In [4]: unested = [list(itertools.chain(*sub)) for sub in nested]

In [5]: unested
Out[5]: [[1, 2, 3, 4, 5], [6, 7, 8], [11, 12]]

请注意,利用add列表的解决方案将为您提供O(n ^ 2)性能,其中n是每个子列表中合并的子子列表的数量。