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中threading模块的几个常用方法
Jun 18 Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
Jan 16 Python
matplotlib在python上绘制3D散点图实例详解
Dec 09 Python
Django读取Mysql数据并显示在前端的实例
May 27 Python
pandas 快速处理 date_time 日期格式方法
Nov 12 Python
Python 通过调用接口获取公交信息的实例
Dec 17 Python
Python2和Python3之间的str处理方式导致乱码的讲解
Jan 03 Python
python内存管理机制原理详解
Aug 12 Python
pytorch实现mnist分类的示例讲解
Jan 10 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
Mar 24 Python
Django实现列表页商品数据返回教程
Apr 03 Python
python学生管理系统的实现
Apr 05 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
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
深入分析php之面向对象
2013/05/15 PHP
php读取目录所有文件信息dir示例
2014/03/18 PHP
php中strtotime函数用法详解
2014/11/15 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
PHP利用百度ai实现文本和图片审核
2019/05/08 PHP
XHTML下,JS浮动代码失效的问题
2009/11/12 Javascript
多个js与css文件的合并方法详细说明
2012/12/26 Javascript
JS图片自动轮换效果实现思路附截图
2014/04/30 Javascript
javascript常用函数归纳整理
2014/10/31 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
2015/03/26 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
JavaScript数据存储 Cookie篇
2016/07/02 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
手把手教你搭建ES6的开发运行环境
2017/07/11 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
2018/09/27 Javascript
vue自定义指令directive的使用方法
2019/04/07 Javascript
简述ES6新增关键字let与var的区别
2019/08/23 Javascript
详解JavaScript 异步编程
2020/07/13 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
Python通过matplotlib画双层饼图及环形图简单示例
2017/12/15 Python
django静态文件加载的方法
2018/05/20 Python
深入浅析python 中的匿名函数
2018/05/21 Python
不到20行代码用Python做一个智能聊天机器人
2019/04/19 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
2019/05/18 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
清除canvas画布内容(点擦除+线擦除)
2020/08/12 HTML / CSS
世界上最受欢迎的花店:1-800-Flowers.com
2020/06/01 全球购物
2014年学习雷锋活动总结
2014/03/01 职场文书
幼儿生日活动方案
2014/08/27 职场文书
青春飞扬演讲稿
2014/09/11 职场文书
新娘婚礼致辞
2015/07/27 职场文书
Python中else的三种使用场景
2021/06/16 Python
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技