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实现的百度贴吧网络爬虫实例
Apr 17 Python
深入理解Python变量与常量
Jun 02 Python
详解Python核心编程中的浅拷贝与深拷贝
Jan 07 Python
浅谈python中requests模块导入的问题
May 18 Python
Python格式化日期时间操作示例
Jun 28 Python
python3 property装饰器实现原理与用法示例
May 15 Python
python字典一键多值实例代码分享
Jun 14 Python
python+jinja2实现接口数据批量生成工具
Aug 28 Python
Python collections模块使用方法详解
Aug 28 Python
解决Pytorch 加载训练好的模型 遇到的error问题
Jan 10 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
Jan 22 Python
TensorBoard 计算图的可视化实现
Feb 15 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计算当前程序执行时间示例
2014/04/24 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
javascript 简练的几个函数
2009/08/29 Javascript
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
js的alert弹出框出现乱码解决方案
2013/09/02 Javascript
jquery计算鼠标和指定元素之间距离的方法
2015/06/26 Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
2015/10/30 Javascript
基于jquery实现表格无刷新分页
2016/01/07 Javascript
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
2016/04/11 Javascript
JavaScript数组复制详解
2017/02/02 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
2017/03/01 Javascript
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
详解vue-cli 接口代理配置
2017/12/13 Javascript
javascript代码优化的8点总结
2018/01/29 Javascript
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
NodeJS模块Buffer原理及使用方法解析
2020/11/11 NodeJs
Python中map和列表推导效率比较实例分析
2015/06/17 Python
Python实现自动添加脚本头信息的示例代码
2016/09/02 Python
EM算法的python实现的方法步骤
2018/01/02 Python
简单实现Python爬取网络图片
2018/04/01 Python
Python使用logging模块实现打印log到指定文件的方法
2018/09/05 Python
Python中调用其他程序的方式详解
2019/08/06 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
python3 tcp的粘包现象和解决办法解析
2019/12/09 Python
基于matplotlib中ion()和ioff()的使用详解
2020/06/16 Python
Jmeter调用Python脚本实现参数互相传递的实现
2021/01/22 Python
单位人事专员介绍信
2014/01/11 职场文书
实习老师离校感言
2014/02/03 职场文书
2015出纳试用期工作总结
2014/12/12 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
电影建党伟业观后感
2015/06/01 职场文书
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android
MySQL安装失败的原因及解决步骤
2022/06/14 MySQL