python技巧(1)--如何转换itertools.chain对象为数组
云栖号: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派”