Python转换itertools.chain对象为数组的方法


Posted in Python onFebruary 07, 2020

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

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

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

https://stackoverflow.com/questions/26853860/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 方法的运算速度会更快。

补充:下面看下itertools 的 chain() 方法

# -*- coding:utf-8 -*-
from itertools import chain
from random import randint
# 随机生成 19 个整数(在 60 到 100 之间)
c1 = [randint(60, 100) for _ in range(19)]
# 随机生成 24 个整数(在 60 到 100 之间)
c2 = [randint(60, 100) for _ in range(24)]
# 随机生成 42 个整数(在 60 到 100 之间)
c3 = [randint(60, 100) for _ in range(42)]
# 随机生成 22 个整数(在 60 到 100 之间)
c4 = [randint(60, 100) for _ in range(22)]
count = 0
# chain()可以把一组迭代对象串联起来,形成一个更大的迭代器
for s in chain(c1, c2, c3, c4):
  if s > 90:
    count += 1
print('4 个班单科成绩大于 90 分的人次为', count)

总结

以上所述是小编给大家介绍的Python转换itertools.chain对象为数组的方法,希望对大家有所帮助!

Python 相关文章推荐
深入讲解Java编程中类的生命周期
Feb 05 Python
python自动裁剪图像代码分享
Nov 25 Python
用Python实现KNN分类算法
Dec 22 Python
Django中使用Celery的教程详解
Aug 24 Python
python 获取页面表格数据存放到csv中的方法
Dec 26 Python
对python mayavi三维绘图的实现详解
Jan 08 Python
Python实现批量执行同目录下的py文件方法
Jan 11 Python
Pandas统计重复的列里面的值方法
Jan 30 Python
numpy 返回函数的上三角矩阵实例
Nov 25 Python
在python中logger setlevel没有生效的解决
Feb 21 Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 Python
Python anaconda安装库命令详解
Oct 16 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
Feb 07 #Python
python十进制转二进制的详解
Feb 07 #Python
基于Tensorflow使用CPU而不用GPU问题的解决
Feb 07 #Python
python实现ip地址的包含关系判断
Feb 07 #Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
Feb 06 #Python
Tensorflow中tf.ConfigProto()的用法详解
Feb 06 #Python
Python continue语句实例用法
Feb 06 #Python
You might like
QQ登录 PHP OAuth示例代码
2011/07/20 PHP
php生成QRcode实例
2014/09/22 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
2014/11/19 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
2016/04/07 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
在JavaScript中,为什么要尽可能使用局部变量?
2009/04/06 Javascript
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
2013/06/26 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
js中事件的处理与浏览器对象示例介绍
2013/11/29 Javascript
JS 数字转换研究总结
2013/12/26 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
原生javascript实现图片按钮切换
2015/01/12 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
javascript实现去除HTML标签的方法
2016/12/26 Javascript
JS 仿支付宝input文本输入框放大组件的实例
2017/11/14 Javascript
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
vue页面跳转实现页面缓存操作
2020/07/22 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
[02:24]DOTA2亚洲邀请赛 NAVI战队出场宣传片
2015/02/07 DOTA
python list中append()与extend()用法分享
2013/03/24 Python
Python程序员面试题 你必须提前准备!
2018/01/16 Python
python覆盖写入,追加写入的实例
2019/06/26 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
2019/07/30 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
澳大利亚领先的武术用品和健身器材供应商:SMAI
2019/03/24 全球购物
幼儿园门卫岗位职责范本
2014/07/02 职场文书
2014年乡镇工作总结
2014/11/21 职场文书
公司2014年度工作总结
2014/12/10 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书