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 + openpyxl处理excel2007文档思路以及心得
Jul 14 Python
Python中的True,False条件判断实例分析
Jan 12 Python
线程和进程的区别及Python代码实例
Feb 04 Python
Apache如何部署django项目
May 21 Python
Python探索之修改Python搜索路径
Oct 25 Python
Python 实现12306登录功能实例代码
Feb 09 Python
使用python 计算百分位数实现数据分箱代码
Mar 03 Python
Python多进程multiprocessing、进程池用法实例分析
Mar 24 Python
python简单的三元一次方程求解实例
Apr 02 Python
浅谈python出错时traceback的解读
Jul 15 Python
Python爬虫获取豆瓣电影并写入excel
Jul 31 Python
Python实现自动装机功能案例分析
Oct 22 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
谈谈PHP语法(4)
2006/10/09 PHP
ThinkPHP安装和设置
2015/07/27 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
2016/10/08 PHP
php之可变变量的实例详解
2017/09/12 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
浅谈PHP实现大流量下抢购方案
2017/12/15 PHP
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
2009/07/06 Javascript
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
2014/04/14 Javascript
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
javascript动态控制服务器控件实例
2014/09/05 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
2016/11/25 Javascript
基于iscroll.js实现下拉刷新和上拉加载效果
2016/11/28 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
JavaScript实现简单轮播图效果
2018/12/01 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
2021/02/08 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
Python数据结构之顺序表的实现代码示例
2017/11/15 Python
在Python中使用gRPC的方法示例
2018/08/08 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
2018/10/23 Python
django中ORM模型常用的字段的使用方法
2019/03/05 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
Django 解决model 反向引用中的related_name问题
2020/05/19 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
详解使用postMessage解决iframe跨域通信问题
2019/11/01 HTML / CSS
应聘医学检验人员自荐信
2013/09/27 职场文书
中文系师范生自荐信
2013/10/01 职场文书
教学大赛获奖感言
2014/01/15 职场文书
酒店销售经理岗位职责
2014/01/31 职场文书
初中三年毕业生的自我评价分享
2014/02/14 职场文书
无财产离婚协议书范本
2014/10/28 职场文书
《去年的树》教学反思
2016/02/18 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers