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 16 Python
在RedHat系Linux上部署Python的Celery框架的教程
Apr 07 Python
python利用datetime模块计算时间差
Aug 04 Python
Python之str操作方法(详解)
Jun 19 Python
python和flask中返回JSON数据的方法
Mar 26 Python
python中dir()与__dict__属性的区别浅析
Dec 10 Python
pandas.read_csv参数详解(小结)
Jun 21 Python
python实现网站用户名密码自动登录功能
Aug 09 Python
Pycharm 字体大小调整设置的方法实现
Sep 27 Python
PyCharm更改字体和界面样式的方法步骤
Sep 27 Python
tensorflow自定义激活函数实例
Feb 04 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
May 15 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
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
php htmlentities和htmlspecialchars 的区别
2008/08/18 PHP
php笔记之:初探PHPcms模块开发介绍
2013/04/26 PHP
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
php获取远程文件大小
2015/10/20 PHP
PHP实现的统计数据功能详解
2016/12/06 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
JavaScript 作用域链解析
2014/11/13 Javascript
jQuery中:header选择器用法实例
2014/12/29 Javascript
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
JavaScript中通过提示框跳转页面的方法
2016/02/14 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
2016/09/01 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
2017/03/15 Javascript
JavaScript闭包的简单应用
2017/09/01 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
python 异常处理总结
2016/10/18 Python
python操作xlsx文件的包openpyxl实例
2018/05/03 Python
python itchat实现调用微信接口的第三方模块方法
2019/06/11 Python
python如何实现DES加密
2020/09/21 Python
Django url 路由匹配过程详解
2021/01/22 Python
详解css position 5种不同的值的用法
2019/07/30 HTML / CSS
给酒店员工的表扬信
2014/01/11 职场文书
迟到检讨书500字
2014/02/05 职场文书
《美丽的彩虹》教学反思
2014/02/25 职场文书
学校就业推荐信范文
2014/05/19 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
欢送会主持词
2015/07/01 职场文书
放假通知怎么写
2015/08/18 职场文书
Python基础之pandas数据合并
2021/04/27 Python
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js