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 实时遍历日志文件
Apr 12 Python
Python set常用操作函数集锦
Nov 15 Python
Python学习之Django的管理界面代码示例
Feb 10 Python
Python3基于sax解析xml操作示例
May 22 Python
python矩阵的转置和逆转实例
Dec 12 Python
python实现百度OCR图片识别过程解析
Jan 17 Python
关于Python turtle库使用时坐标的确定方法
Mar 19 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
Apr 28 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
May 13 Python
python 图像插值 最近邻、双线性、双三次实例
Jul 05 Python
python 中的jieba分词库
Nov 23 Python
Python机器学习应用之工业蒸汽数据分析篇详解
Jan 18 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图片验证码实例
2014/03/21 PHP
PHP制作登录异常ip检测功能的实例代码
2016/11/16 PHP
随窗体滑动的小插件sticky源码
2013/06/21 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
vue+swiper实现侧滑菜单效果
2017/12/28 Javascript
nodeJS服务器的创建和重新启动的实现方法
2018/05/12 NodeJs
React中如何引入Angular组件详解
2018/08/09 Javascript
vue.js template模板的使用(仿饿了么布局)
2018/08/13 Javascript
Python编程之变量赋值操作实例分析
2017/07/24 Python
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
python 用for循环实现1~n求和的实例
2019/02/01 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
2020/11/02 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
2021/01/10 Python
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
倩碧美国官网:Clinique美国
2016/07/20 全球购物
Tommy Hilfiger澳洲官网:美国高端休闲领导品牌
2020/12/16 全球购物
幼儿园托班开学寄语
2014/01/18 职场文书
总会计师岗位职责
2014/02/19 职场文书
中文教师求职信
2014/02/22 职场文书
授权委托书怎么写
2014/04/03 职场文书
高二学生评语大全
2014/04/25 职场文书
小学竞选班干部演讲稿
2014/08/20 职场文书
六一儿童节活动总结
2014/08/27 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
2016暑期社会实践心得体会范文
2016/01/14 职场文书
2019年最新借条范本!
2019/07/08 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书
Vue ECharts实现机舱座位选择展示功能
2022/05/15 Vue.js
MySQL示例讲解数据库约束以及表的设计
2022/06/16 MySQL
Docker部署Mysql8的实现步骤
2022/07/07 Servers