首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >三重嵌套列表Python

三重嵌套列表Python
EN

Stack Overflow用户
提问于 2017-12-13 14:05:35
回答 9查看 6.1K关注 0票数 12

我有一个代码块,它提供了一个列表,其中包含一些三重嵌套列表:

代码语言:javascript
复制
my_list = [[['item1','item2']], [['item3', 'item4']]]

我想让它成为:

代码语言:javascript
复制
my_list = [['item1','item2'], ['item3', 'item4']]

有什么建议吗?

EN

回答 9

Stack Overflow用户

发布于 2017-12-13 14:36:28

使用列表理解从每个子列表中选择单个子列表:

代码语言:javascript
复制
>>> my_list = [item[0] for item in my_list]
[['item1', 'item2'], ['item3', 'item4']]

使用sum也可以扁平化这种嵌套级别,但这是一个等待发生的性能灾难,因为它有二次运行时:

代码语言:javascript
复制
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倍的速度,这根本不是一个很长的列表。对于较长的列表,情况甚至更糟。

票数 25
EN

Stack Overflow用户

发布于 2017-12-13 14:09:31

执行以下操作:

代码语言:javascript
复制
my_list = [j for i in my_list for j in i ]
票数 14
EN

Stack Overflow用户

发布于 2017-12-13 14:38:48

一种简单但有效的方法是使用itertools.chain.from_iterable扁平化您的三重嵌套列表:

代码语言:javascript
复制
>>> 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)复杂度。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47786568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档