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中用keys()方法返回字典键的教程
May 21 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
May 18 Python
Python基于win32ui模块创建弹出式菜单示例
May 09 Python
用Python读取几十万行文本数据
Dec 24 Python
用Python写一个模拟qq聊天小程序的代码实例
Mar 06 Python
代码实例讲解python3的编码问题
Jul 08 Python
python Django 创建应用过程图示详解
Jul 29 Python
Django使用list对单个或者多个字段求values值实例
Mar 31 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
Apr 24 Python
python实现磁盘日志清理的示例
Nov 05 Python
Python排序函数的使用方法详解
Dec 11 Python
python中Pexpect的工作流程实例讲解
Mar 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
第四节 构造函数和析构函数 [4]
2006/10/09 PHP
杏林同学录(三)
2006/10/09 PHP
用PHP和ACCESS写聊天室(六)
2006/10/09 PHP
PHP 上传文件的方法(类)
2009/07/30 PHP
PHP 引用是个坏习惯
2010/03/12 PHP
Php中文件下载功能实现超详细流程分析
2012/06/13 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
phpstudy2018升级MySQL5.5为5.7教程(图文)
2018/10/24 PHP
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
2009/10/20 Javascript
Javascript 刷新全集常用代码
2009/11/22 Javascript
jQuery实战之品牌展示列表效果
2011/04/10 Javascript
jQuery表单获取和失去焦点输入框提示效果的实例代码
2013/08/01 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
利用javascript判断文件是否存在
2013/12/31 Javascript
jquery easyui中treegrid用法的简单实例
2014/02/18 Javascript
JavaScript设计模式之建造者模式介绍
2014/12/28 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
vue按需加载组件webpack require.ensure的方法
2017/12/13 Javascript
Vue中的$set的使用实例代码
2018/10/08 Javascript
Three.js实现3D机房效果
2018/12/30 Javascript
Nodejs监控事件循环异常示例详解
2019/09/22 NodeJs
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
Python数据结构之翻转链表
2017/02/25 Python
python使用tkinter实现简单计算器
2018/01/30 Python
[原创]Python入门教程4. 元组基本操作
2018/10/31 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
python实现批量处理将图片粘贴到另一张图片上并保存
2019/12/12 Python
Lookfantastic澳大利亚官网:英国知名美妆购物网站
2021/01/07 全球购物
个人找工作的自我评价
2013/10/17 职场文书
法律进机关实施方案
2014/03/12 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
巾帼文明岗申报材料
2014/05/01 职场文书
销售行政专员岗位职责
2014/06/10 职场文书
工地食品安全责任书
2015/05/09 职场文书
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
2021/06/07 Python