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判断windows隐藏文件的方法
Mar 21 Python
Python的垃圾回收机制深入分析
Jul 16 Python
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
Aug 15 Python
python实现井字棋游戏
Mar 30 Python
python字符串连接方法分析
Apr 12 Python
Python 和 JS 有哪些相同之处
Nov 23 Python
解决Python一行输出不显示的问题
Dec 03 Python
说说如何遍历Python列表的方法示例
Feb 11 Python
Python Django框架实现应用添加logging日志操作示例
May 17 Python
python、Matlab求定积分的实现
Nov 20 Python
Keras 使用 Lambda层详解
Jun 10 Python
Python数据分析之pandas读取数据
Jun 02 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和AJAX创建RSS聚合器的代码
2007/03/13 PHP
PHP strncasecmp字符串比较的小技巧
2011/01/04 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
2016/10/08 PHP
php实现的SSO单点登录系统接入功能示例分析
2016/10/12 PHP
PHP magento后台无法登录问题解决方法
2016/11/24 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
2011/03/28 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
2015/09/12 Javascript
js基于setTimeout与setInterval实现多线程
2016/06/17 Javascript
基于Bootstrap的Metronic框架实现页面链接收藏夹功能
2016/08/29 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
JS+html5 canvas实现的简单绘制折线图效果示例
2017/03/13 Javascript
详解ES6之async+await 同步/异步方案
2017/09/19 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
python机器学习理论与实战(二)决策树
2018/01/19 Python
Python数据集切分实例
2018/12/08 Python
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
python批量创建指定名称的文件夹
2019/03/21 Python
Python集成开发工具Pycharm的安装和使用详解
2020/03/18 Python
Python Numpy中数据的常用保存与读取方法
2020/04/01 Python
python 实现PIL模块在图片画线写字
2020/05/16 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
国际知名设计师时装商店:Coggles
2016/09/05 全球购物
英国最大的在线运动补充剂商店:Discount Supplements
2017/06/03 全球购物
有个性的自我评价范文
2013/11/15 职场文书
收入证明申请书
2015/06/12 职场文书
2016年“9.22”世界无车日活动小结
2016/04/05 职场文书
MySQL表字段数量限制及行大小限制详情
2022/07/23 MySQL