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 相关文章推荐
python网络编程学习笔记(一)
Jun 09 Python
浅谈Python 对象内存占用
Jul 15 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
May 04 Python
python删除字符串中指定字符的方法
Aug 13 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
Apr 16 Python
python+openCV利用摄像头实现人员活动检测
Jun 22 Python
python中的global关键字的使用方法
Aug 20 Python
Python对接 xray 和微信实现自动告警
Sep 17 Python
Python函数递归调用实现原理实例解析
Aug 11 Python
Python接口自动化测试的实现
Aug 28 Python
Python requests上传文件实现步骤
Sep 15 Python
matplotlib绘制多子图共享鼠标光标的方法示例
Jan 08 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
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
使用bcompiler对PHP文件进行加密的代码
2010/08/29 PHP
让PHP以ROOT权限执行系统命令的方法
2011/02/10 PHP
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
2011/04/18 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
2013/06/05 PHP
PHP文件大小格式化函数合集
2014/03/10 PHP
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
JS模拟面向对象全解(一、类型及传递)
2011/07/13 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
Jquery刷新页面背景图片随机变换的实现方法
2013/03/15 Javascript
js保留两位小数使用toFixed实现
2013/07/29 Javascript
html文档中的location对象属性理解及常见的用法
2014/08/13 Javascript
JavaScript中继承用法实例分析
2015/05/16 Javascript
javascript遇到html5的一些表单属性
2015/07/05 Javascript
AngularJs bootstrap搭载前台框架——准备工作
2016/09/01 Javascript
分类解析jQuery选择器
2016/11/23 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
微信小程序左右滑动切换页面详解及实例代码
2017/02/28 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
微信小程序获取音频时长与实时获取播放进度问题
2018/08/28 Javascript
利用js-cookie实现前端设置缓存数据定时失效
2019/06/18 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
详解pyinstaller selenium python3 chrome打包问题
2019/10/18 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
新建文件时Pycharm中自动设置头部模板信息的方法
2020/04/17 Python
一款基于css3的动画按钮代码教程
2014/11/23 HTML / CSS
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
美国最佳选择产品网站:Best Choice Products
2019/05/27 全球购物
请介绍一下WSDL的文档结构
2013/03/17 面试题
Ajax实现页面无刷新留言效果
2021/03/24 Javascript
党校培训思想汇报
2013/12/30 职场文书
表彰大会主持词
2014/03/26 职场文书
银行金融服务方案
2014/06/11 职场文书
web前端之css水平居中代码解析
2021/05/20 HTML / CSS
浅谈Node的内存泄露问题
2022/05/06 NodeJs