我有一个代码块,它提供了一个列表,其中包含一些三重嵌套列表:
my_list = [[['item1','item2']], [['item3', 'item4']]]我想让它成为:
my_list = [['item1','item2'], ['item3', 'item4']]有什么建议吗?
发布于 2017-12-13 14:36:28
使用列表理解从每个子列表中选择单个子列表:
>>> my_list = [item[0] for item in my_list]
[['item1', 'item2'], ['item3', 'item4']]使用sum也可以扁平化这种嵌套级别,但这是一个等待发生的性能灾难,因为它有二次运行时:
In [5]: my_list = [[[i, i+1]] for i in range(0, 10000, 2)]
In [6]: %timeit sum(my_list, [])
78.6 ms ± 2.15 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [7]: %timeit [x[0] for x in my_list]
187 µs ± 3.05 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [8]: 78600/187
Out[8]: 420.32085561497325对于5000长的my_list来说,这是420倍的速度,这根本不是一个很长的列表。对于较长的列表,情况甚至更糟。
发布于 2017-12-13 14:09:31
执行以下操作:
my_list = [j for i in my_list for j in i ]发布于 2017-12-13 14:38:48
一种简单但有效的方法是使用itertools.chain.from_iterable扁平化您的三重嵌套列表:
>>> import itertools
>>> my_list = [[['item1','item2']],[['item3','item4']]]
>>> my_list = list(itertools.chain.from_iterable(my_list))
>>> my_list
[['item1', 'item2'], ['item3', 'item4']]其对于大小为n的列表具有O(n)复杂度。
https://stackoverflow.com/questions/47786568
复制相似问题