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实现类似ftp传输文件的网络程序示例
Apr 08 Python
python实现通过代理服务器访问远程url的方法
Apr 29 Python
Python利用turtle库绘制彩虹代码示例
Dec 20 Python
ubuntu安装sublime3并配置python3环境的方法
Mar 15 Python
Python常见MongoDB数据库操作实例总结
Jul 24 Python
Django框架实现的简单分页功能示例
Dec 04 Python
python pandas写入excel文件的方法示例
Jun 25 Python
python安装scipy的步骤解析
Sep 28 Python
TensorFlow2.0:张量的合并与分割实例
Jan 19 Python
flask 框架操作MySQL数据库简单示例
Feb 02 Python
python十进制转二进制的详解
Feb 07 Python
Python中Matplotlib的点、线形状、颜色以及绘制散点图
Apr 07 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 daddslashes 使用方法介绍
2012/10/26 PHP
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
PHP中JSON的应用技巧
2015/10/10 PHP
阿里云PHP SMS短信服务验证码发送方法
2017/07/11 PHP
php根据命令行参数生成配置文件详解
2019/03/15 PHP
快速保存网页中所有图片的方法
2006/06/23 Javascript
js计算两个时间之间天数差的实例代码
2013/11/19 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
详解angularJs中自定义directive的数据交互
2017/01/13 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
Puppet的一些技巧
2018/09/17 Javascript
axios使用拦截器统一处理所有的http请求的方法
2018/11/02 Javascript
js作用域和作用域链及预解析
2019/04/11 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
2019/07/15 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
2020/09/12 Javascript
python+opencv实现的简单人脸识别代码示例
2017/11/14 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
Python基于OpenCV实现视频的人脸检测
2018/01/23 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
python通过移动端访问查看电脑界面
2020/01/06 Python
Python变量格式化输出实现原理解析
2020/08/06 Python
python能做哪些生活有趣的事情
2020/09/09 Python
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
《会变的花树叶》教学反思
2014/02/10 职场文书
集团公司党的群众路线教育实践活动工作总结
2014/03/03 职场文书
电教室标语
2014/06/20 职场文书
化工工艺设计求职信
2014/06/25 职场文书
2014年入党积极分子学习三中全会思想汇报
2014/09/13 职场文书
怀孕辞职信怎么写
2015/02/28 职场文书
高中政治教师教学反思
2016/02/23 职场文书
pytorch查看网络参数显存占用量等操作
2021/05/12 Python
python中的None与NULL用法说明
2021/05/25 Python
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python