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爬虫抓取暴走漫画上gif图片的实例分享
Apr 20 Python
Python处理JSON数据并生成条形图
Aug 05 Python
python算法表示概念扫盲教程
Apr 13 Python
pytorch中tensor的合并与截取方法
Jul 26 Python
python得到windows自启动列表的方法
Oct 14 Python
python调用java的jar包方法
Dec 15 Python
Python3 安装PyQt5及exe打包图文教程
Jan 08 Python
python实现植物大战僵尸游戏实例代码
Jun 10 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
使用python创建生成动态链接库dll的方法
May 09 Python
从python读取sql的实例方法
Jul 21 Python
用python对oracle进行简单性能测试
Dec 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 imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
ThinkPHP 404页面的设置方法
2015/01/14 PHP
jQuery弹出层插件简化版代码下载
2008/10/16 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
jQuery学习笔记之控制页面实现代码
2012/02/27 Javascript
浅析js中的浮点型运算问题
2014/01/06 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
2014/02/12 Javascript
JavaScript中的console.time()函数详细介绍
2014/12/29 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
微信小程序 闭包写法详细介绍
2016/12/14 Javascript
原生js实现验证码功能
2017/03/16 Javascript
详解nodejs爬虫程序解决gbk等中文编码问题
2017/04/06 NodeJs
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
使用Nuxt.js改造已有项目的方法
2018/08/07 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
vue data恢复初始化数据的实现方法
2019/10/31 Javascript
Python实现以时间换空间的缓存替换算法
2016/02/19 Python
Python2.7下安装Scrapy框架步骤教程
2017/12/22 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
Python OpenCV调用摄像头检测人脸并截图
2020/08/20 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
Python序列类型的打包和解包实例
2019/12/21 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
2020/11/15 Python
Sneaker Studio捷克:购买运动鞋
2018/07/08 全球购物
法国足球商店:Footcenter
2019/07/06 全球购物
美国高端牛仔品牌:Silver Jeans
2019/12/12 全球购物
给学校的建议书
2014/03/12 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
不同意离婚上诉状
2015/05/23 职场文书
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers