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中实现结构相似的函数调用方法
Mar 10 Python
python通过线程实现定时器timer的方法
Mar 16 Python
对numpy和pandas中数组的合并和拆分详解
Apr 11 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
May 04 Python
python实现输入数字的连续加减方法
Jun 22 Python
python MNIST手写识别数据调用API的方法
Aug 08 Python
python 构造三维全零数组的方法
Nov 12 Python
python机器学习库scikit-learn:SVR的基本应用
Jun 26 Python
为什么说Python可以实现所有的算法
Oct 04 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 Python
Numpy 理解ndarray对象的示例代码
Apr 03 Python
python构造IP报文实例
May 05 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中的数组操作函数整理
2008/08/18 PHP
php中++i 与 i++ 的区别
2012/08/08 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
微信支付开发订单查询实例
2016/07/12 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
PHP使用CURL实现下载文件功能示例
2019/06/03 PHP
Mootools 1.2教程 选项卡效果(Tabs)
2009/09/15 Javascript
jquery中dom操作和事件的实例学习-表单验证
2011/11/30 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
js实现交换运动效果的方法
2015/04/10 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
nodejs多版本管理总结
2018/04/03 NodeJs
vue中的provide/inject的学习使用
2018/05/09 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
基于better-scroll 实现歌词联动功能的代码
2020/05/07 Javascript
python实现将文本转换成语音的方法
2015/05/28 Python
python获得文件创建时间和修改时间的方法
2015/06/30 Python
Python中字符串的处理技巧分享
2016/09/17 Python
在Python中,不用while和for循环遍历列表的实例
2019/02/20 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
keras实现多GPU或指定GPU的使用介绍
2020/06/17 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
2021/01/27 Python
HTML5文档结构标签
2017/04/21 HTML / CSS
英国户外装备和冒险服装零售商:alloutdoor
2018/01/30 全球购物
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
linux面试题参考答案(8)
2015/08/11 面试题
九年级语文教学反思
2014/02/04 职场文书
2014年校务公开工作总结
2014/12/18 职场文书
大学生创业,为什么都会选择快餐饮?
2019/08/08 职场文书
Java生成读取条形码和二维码的简单示例
2021/07/09 Java/Android
SQL Server表分区降低运维和维护成本
2022/04/08 SQL Server
MySQL数据库查询进阶之多表查询详解
2022/04/08 MySQL