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 BeautifulSoup库抓取58手机维修信息
Nov 21 Python
python 读写txt文件 json文件的实现方法
Oct 22 Python
python实现杨辉三角思路
Jul 14 Python
Python编程求质数实例代码
Jan 31 Python
python执行系统命令后获取返回值的几种方式集合
May 12 Python
widows下安装pycurl并利用pycurl请求https地址的方法
Oct 15 Python
python适合人工智能的理由和优势
Jun 28 Python
Python异常处理例题整理
Jul 07 Python
Python内置方法实现字符串的秘钥加解密(推荐)
Dec 09 Python
python 画图 图例自由定义方式
Apr 17 Python
python 抓取知乎指定回答下视频的方法
Jul 09 Python
Anaconda安装pytorch及配置PyCharm 2021环境
Jun 04 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程序中防止盗链
2008/04/09 PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
2013/05/13 PHP
php多任务程序实例解析
2014/07/19 PHP
laravel自定义分页效果
2017/07/23 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
脚本收藏iframe
2006/07/21 Javascript
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
javascript 对象数组根据对象object key的值排序
2015/03/09 Javascript
JS简单实现动画弹出层效果
2015/05/05 Javascript
js 声明数组和向数组中添加对象变量的简单实例
2016/07/28 Javascript
JavaScript函数柯里化原理与用法分析
2017/03/31 Javascript
微信小程序五星评分效果实现代码
2017/04/06 Javascript
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
Angularjs实现多图片上传预览功能
2018/07/18 Javascript
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
[55:32]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第二场
2018/04/05 DOTA
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
python list排序的两种方法及实例讲解
2017/03/20 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
python中yield的用法详解——最简单,最清晰的解释
2019/04/04 Python
关于Pytorch的MLP模块实现方式
2020/01/07 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
浅析HTML5的WebSocket与服务器推送事件
2016/02/19 HTML / CSS
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
2014/10/31 面试题
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
临床护士自荐信
2014/01/31 职场文书
2014年端午节活动方案
2014/03/11 职场文书
手机被没收的检讨书
2014/10/04 职场文书
2014年公务员个人工作总结
2014/11/22 职场文书
项目建议书
2015/02/04 职场文书
音乐剧猫观后感
2015/06/04 职场文书
简短的人生哲理(38句)
2019/08/13 职场文书