python技巧(1)--如何转换itertools.chain对象为数组

云栖号资讯小编 2020-02-09

python aliyun list 数组

云栖号:https://yqh.aliyun.com
第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策!

之前做1月总结的时候说过希望每天或者每2天开始的更新一些学习笔记,这是开始的第一篇。

这篇介绍的是如何把一个 itertools.chain 对象转换为一个数组。

参考 stackoverflow 上的一个回答:Get an array back from an itertools.chain object,

例子:

list_of_numbers = [[1, 2], [3], []]
import itertools
chain = itertools.chain(*list_of_numbers)

解决方法有两种:

第一种比较简单,直接采用 list 方法,如下所示:

list(chain)

但缺点有两个:

会在外层多嵌套一个列表

效率并不高

第二个就是利用 numpy 库的方法 np.fromiter,示例如下:

>>> import numpy as np
>>> from itertools import chain
>>> list_of_numbers = [[1, 2], [3], []]
>>> np.fromiter(chain(*list_of_numbers), dtype=int)
array([1, 2, 3])

对比两种方法的运算时间,如下所示:

>>> list_of_numbers = [[1, 2]*1000, [3]*1000, []]*1000
>>> %timeit np.fromiter(chain(*list_of_numbers), dtype=int)
10 loops, best of 3: 103 ms per loop
>>> %timeit np.array(list(chain(*list_of_numbers)))
1 loops, best of 3: 199 ms per loop

可以看到采用 numpy 方法的运算速度会更快。

云栖号:https://yqh.aliyun.com
第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策!

原文发布时间:2020-02-08
本文作者:kbsc13
本文来自:“AI派公众号”,了解相关信息可以关注“AI派

登录 后评论
下一篇
云栖号资讯小编
842人浏览
2020-03-31
相关推荐
python的高级应用
706人浏览
2017-11-15 22:19:00
python 实用的30个小技巧
839人浏览
2017-04-15 10:58:26
linux 桌面背景随心换
791人浏览
2008-10-10 21:17:00
collections模块的Counter类
527人浏览
2017-04-12 11:21:39
python 相见恨晚的itertools库
584人浏览
2017-04-04 05:28:03
python标准库之itertools
657人浏览
2017-11-15 23:04:00
0
0
0
464