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入门篇之字符串
Oct 17 Python
Python实现的FTP通信客户端与服务器端功能示例
Mar 28 Python
python感知机实现代码
Jan 18 Python
python 实现交换两个列表元素的位置示例
Jun 26 Python
如何使用python爬虫爬取要登陆的网站
Jul 12 Python
使用Django搭建一个基金模拟交易系统教程
Nov 18 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
Nov 22 Python
Python任务调度模块APScheduler使用
Apr 15 Python
Django设置Postgresql的操作
May 14 Python
Python连接Impala实现步骤解析
Aug 04 Python
Python+unittest+requests 接口自动化测试框架搭建教程
Oct 09 Python
Python的Tqdm模块实现进度条配置
Feb 24 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
自己动手做一个SQL解释器
2006/10/09 PHP
mysql建立外键
2006/11/25 PHP
PHP的拦截器实例分析
2014/11/03 PHP
微信公众平台实现获取用户OpenID的方法
2015/04/15 PHP
PHP自定义错误用法示例
2016/09/28 PHP
input+select(multiple) 实现下拉框输入值
2009/05/21 Javascript
javascript之通用简单的table选项卡实现(二)
2010/05/09 Javascript
jquery中this的使用说明
2010/09/06 Javascript
用Javascript实现Windows任务管理器的代码
2012/03/27 Javascript
js模拟点击以提交表单为例兼容主流浏览器
2013/11/29 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
使用AngularJS实现表单向导的方法
2015/06/19 Javascript
jQuery实现新消息在网页标题闪烁提示
2015/06/23 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
如何利用Promises编写更优雅的JavaScript代码
2016/05/17 Javascript
angularjs实现搜索的关键字在正文中高亮出来
2017/06/13 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
jQuery DOM节点的遍历方法小结
2017/08/15 jQuery
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
[00:56]PWL开团时刻DAY8——追追追追追!
2020/11/09 DOTA
python搭建简易服务器分析与实现
2012/12/15 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
2020/11/20 Python
跑步爱好者一站式服务网站:Jack Rabbit
2016/09/01 全球购物
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
社区工作者先进事迹
2014/01/18 职场文书
2014年五四青年节演讲比赛方案
2014/04/22 职场文书
外贸会计专业自荐信
2014/06/22 职场文书
公民代理授权委托书
2014/09/24 职场文书
王金山在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
node快速搭建后台的实现步骤
2022/02/18 NodeJs