栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在不使用numpy的情况下将2D列表展平为1D?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在不使用numpy的情况下将2D列表展平为1D?

如果没有numpy(

ndarray.flatten
),一种使用方式
chain.from_iterable
itertools.chain

>>> list(chain.from_iterable([[1,2,3],[1,2],[1,4,5,6,7]]))[1, 2, 3, 1, 2, 1, 4, 5, 6, 7]

或者作为另一种Python方式,您可以使用 列表理解

[j for sub in [[1,2,3],[1,2],[1,4,5,6,7]] for j in sub]

另一个非常适合短列表的功能方法也可以

reduce
在Python2和
functools.reduce
Python3中使用(不要将其用于长列表):

In [4]: from functools import reduce # Python3In [5]: reduce(lambda x,y :x+y ,[[1,2,3],[1,2],[1,4,5,6,7]])Out[5]: [1, 2, 3, 1, 2, 1, 4, 5, 6, 7]

为了使其更快一点,您可以使用

operator.add
内置,而不是
lambda

In [6]: from operator import addIn [7]: reduce(add ,[[1,2,3],[1,2],[1,4,5,6,7]])Out[7]: [1, 2, 3, 1, 2, 1, 4, 5, 6, 7]In [8]: %timeit reduce(lambda x,y :x+y ,[[1,2,3],[1,2],[1,4,5,6,7]])789 ns ± 7.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)In [9]: %timeit reduce(add ,[[1,2,3],[1,2],[1,4,5,6,7]])635 ns ± 4.38 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

基准:

:~$ python -m timeit "from itertools import chain;chain.from_iterable([[1,2,3],[1,2],[1,4,5,6,7]])"1000000 loops, best of 3: 1.58 usec per loop:~$ python -m timeit "reduce(lambda x,y :x+y ,[[1,2,3],[1,2],[1,4,5,6,7]])"1000000 loops, best of 3: 0.791 usec per loop:~$ python -m timeit "[j for i in [[1,2,3],[1,2],[1,4,5,6,7]] for j in i]"1000000 loops, best of 3: 0.784 usec per loop

使用@Will答案的基准测试

sum
(对于短列表而言,它的速度很快,但对于长列表而言,它的速度很快):

:~$ python -m timeit "sum([[1,2,3],[4,5,6],[7,8,9]], [])"1000000 loops, best of 3: 0.575 usec per loop:~$ python -m timeit "sum([range(100),range(100)], [])"100000 loops, best of 3: 2.27 usec per loop:~$ python -m timeit "reduce(lambda x,y :x+y ,[range(100),range(100)])"100000 loops, best of 3: 2.1 usec per loop


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/639442.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号