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中使用HTMLParser解析html实例
Feb 08 Python
Django中模版的子目录与include标签的使用方法
Jul 16 Python
Python实现文件内容批量追加的方法示例
Aug 29 Python
Python网络编程详解
Oct 31 Python
Python使用PIL模块生成随机验证码
Nov 21 Python
python测试mysql写入性能完整实例
Jan 18 Python
python删除字符串中指定字符的方法
Aug 13 Python
学习python的前途 python挣钱
Feb 27 Python
Python使用正则表达式分割字符串的实现方法
Jul 16 Python
python 单线程和异步协程工作方式解析
Sep 28 Python
在Python中画图(基于Jupyter notebook的魔法函数)
Oct 28 Python
Python实现计算长方形面积(带参数函数demo)
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带密码功能并下载远程文件保存本地指定目录 修改加强版
2010/05/16 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
js和jquery设置disabled属性为true使按钮失效
2014/08/07 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
vue vuex vue-rouert后台项目——权限路由(适合初学)
2017/12/29 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
使用Vue实现移动端左滑删除效果附源码
2019/05/16 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
[01:11:27]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Optic
2018/04/03 DOTA
python字符串对其居中显示的方法
2015/07/11 Python
详解Python3中的Sequence type的使用
2015/08/01 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
jupyter notebook远程访问不了的问题解决方法
2021/01/11 Python
canvas之自定义头像功能实现代码示例
2017/09/29 HTML / CSS
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
业务代表的岗位职责
2013/11/16 职场文书
应届医学毕业生求职信分享
2013/12/02 职场文书
年终考核评语
2014/01/19 职场文书
党员批评与自我批评
2014/02/12 职场文书
数控技校生自我鉴定
2014/03/02 职场文书
2014年三万活动总结
2014/04/26 职场文书
毕业设计说明书
2014/05/07 职场文书
金融专业毕业生自荐信
2014/06/26 职场文书
分公司总经理岗位职责
2014/08/03 职场文书
病危通知书样本
2015/04/17 职场文书
会议主持人开场白台词
2015/05/28 职场文书
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python
Win11怎么进入安全模式?Windows 11进入安全模式的方法
2021/11/21 数码科技
Windows10安装Apache2.4的方法步骤
2022/06/25 Servers