如何在不同长度的列表中删除嵌套的最内层
问题内容:
我正在尝试删除单元素长度列表的列表中最里面的嵌套。您是否知道一种相对简单的方法(转换为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是每个子列表中合并的子子列表的数量。