python中itertools模块使用小结
作者:嗨,阿良 发布时间:2023-08-07 18:44:32
Python 内置的 itertools 模块包含了一系列用来产生不同类型迭代器的函数或类,这些函数的返回都是一个迭代器,我们可以通过 for 循环来遍历取值,也可以使用 next() 来取值。
itertools 模块提供的迭代器函数有以下几种类型:
无限迭代器:生成一个无限序列,比如自然数序列 1, 2, 3, 4, ...;
有限迭代器:接收一个或多个序列(sequence)作为参数,进行组合、分组和过滤等;
组合生成器:序列的排列、组合,求序列的笛卡儿积等。
itertools
高效循环下创建循环器的标准库
Infinite itertools,无限迭代器
itertools.count(start=0, step=10)
默认返回一个从0开始,依次+10的自然数迭代器,如果你不停止,它会一直运行下去。
可以用start指定开始的位置,step是步长。
import itertools
c = itertools.count(start=0, step=1)
for i in c:
print(i)
# 0
# 10
# 20
# 30
# 40
# 50
# ...
itertools.cycle(iterable)
传入一个可迭代对象,然后无限循环迭代。
import itertools
# itertools.count()
l = [1,2,3,4,5]
c = itertools.cycle(l)
for i in c:
print(i)
# 1
# 2
# 3
# 4
# 5
# 1
# 2
# 3
# 4
# 5
# ...
itertools.repeat(p_object, times=None)
重复迭代一个对象p_object,如果不指定times,则会迭代无数次,也可以通过times参数指定迭代的次数。
import itertools
# itertools.count()
l = [1,2,3,4,5]
c = itertools.repeat(l, 5)
for i in c:
print(i)
# [1, 2, 3, 4, 5]
# [1, 2, 3, 4, 5]
# [1, 2, 3, 4, 5]
# [1, 2, 3, 4, 5]
# [1, 2, 3, 4, 5]
Iterators terminating on the shortest input sequence
itertools.accumulate(iterable, func)
返回序列的累计值或者其他二进制函数。
import itertools
# itertools.count()
l = [1,2,3,4,5]
c = itertools.accumulate(l)
print(c)
for i in c:
print(i)
# 1
# 3
# 6
# 10
# 15
accumulate()仍然返回的是一个迭代器,传一个list,在for循环中遍历打印的时候发现,它做了累加操作。(迭代第一个数,就是前一个数的和,迭代到第二个数时,就是前两个数的和,以此类推)
并且做递加操作时支持:list, tuple, str, set, dict
传入的是dict对象,那么会累加迭代dict的key:
import itertools
# itertools.count()
d = {'a': 1, 'b': 2, 'c': 3}
c = itertools.accumulate(d)
print(c)
for i in c:
print(i)
# <itertools.accumulate object at 0x000001F7A0A90E48>
# a
# ab
# abc
itertools.chain(*iterables)
chain()方法中的参数可以传入多个序列,而且只要是序列即可,不限定序列的数据类型。
如:迭代list, tuple, str三个序列
import itertools
l = [1, 2, 3, 4, 5]
t = (1, 2, 3, 4, 5)
s = 'abcdefg'
c = itertools.chain(l, t, s)
print(c)
for i in c:
print(i)
# <itertools.chain object at 0x0000026E64801448>
# 1
# 2
# 3
# 4
# 5
# 1
# 2
# 3
# 4
# 5
# a
# b
# c
# d
# e
# f
# g
itertools 笛卡尔积
import itertools
d = [
[{"a": 1}, {"b": 2}], [{"c": 3}, {"d": 4}, {"e": 5}], [{"f": 6}, {"g": 7}]
]
print(*d)
for i in itertools.product(*d):
print(i)
# [{'a': 1}, {'b': 2}] [{'c': 3}, {'d': 4}, {'e': 5}] [{'f': 6}, {'g': 7}]
# ({'a': 1}, {'c': 3}, {'f': 6})
# ({'a': 1}, {'c': 3}, {'g': 7})
# ({'a': 1}, {'d': 4}, {'f': 6})
# ({'a': 1}, {'d': 4}, {'g': 7})
# ({'a': 1}, {'e': 5}, {'f': 6})
# ({'a': 1}, {'e': 5}, {'g': 7})
# ({'b': 2}, {'c': 3}, {'f': 6})
# ({'b': 2}, {'c': 3}, {'g': 7})
# ({'b': 2}, {'d': 4}, {'f': 6})
# ({'b': 2}, {'d': 4}, {'g': 7})
# ({'b': 2}, {'e': 5}, {'f': 6})
# ({'b': 2}, {'e': 5}, {'g': 7})
来源:https://www.cnblogs.com/fengting0913/p/15504283.html
猜你喜欢
- 本文实例讲述了Mysql存储过程中游标的用法。分享给大家供大家参考。具体如下:1. 批量插入商户路由关联数据:DELIMITER $$USE
- Fiddler简介Fiddler(中文名称:小提琴)是一个HTTP的调试代理,以代理服务器的方式,监听系统的Http网络数据流动,Fiddl
- 今天尝试着将引用文献的格式按照IEEE的标准重新排版,感觉手动一条一条改太麻烦,而且很容易出错,所以尝试着用Python写了一个小程序用于根
- 电脑面前的你,是否也希望能让电脑听命于你? 当你累的时候,只需说一声“我累了”,电脑就会放着优雅的轻音乐来让你放松。
- 可能出现的原因有:◆源数据库或目标数据库为 SQL Server 6.5 版。连接到 Access 项目的当前 SQL 服务器和要将数据库转
- l当今世界,技术发展迅猛,不论是什么行业,大多数关键数据都是放置于数据库中进行管理的,一来目前数据库技术已经相当成熟,二来其管理功能非常强大
- 对于题目中提出的问题,可以拆分来一步步解决。在 MySQL 中 KEY 和 INDEX 是同义。那这个问题就可以简化为 PRIMARY KE
- 我是用来移动图片的,其他格式的文档也是可以的,改下后缀列表就可以了import os,shutilimport datetime
- 最近开发了一个网站,大量采用了html5和css3,希望用户都以webkit内核打开页面,但是测试却发现360的以ie内核打开为推荐模式,不
- 本文实例讲述了Python使用itchat模块实现简单的微信控制电脑功能。分享给大家供大家参考,具体如下:#!/usr/bin/python
- insert into values插入多条数据insert into 表名(字段名1,字段名2)values(值a1,值b1), (值a2
- 1. 引言如果能够将我们的无序数据快速组织成更易读的格式,对于数据分析非常有帮助。 Python 提供了将某些表格数据类型轻松转换为格式良好
- 我用asp+access写程序, sql="select *&
- SQLserver代理已经启动了,服务里的SQLServerAgent响应服务也已经开启了 但是启动作业的时候还是提示“错误22022:SQ
- 问题定义一个int型的一维数组,包含40个元素,用来存储每个学员的成绩,循环产生40个0~100之间的随机整数,(1)将它们存储到一维数组中
- 本文实例讲述了python复制文件的方法。分享给大家供大家参考。具体分析如下:这里涉及Python复制文件在实际操作方案中的实际应用以及Py
- 这篇论坛文章主要介绍了SQL Server 2005数据库镜像的配置脚本,详细内容请大家参考下文:SQL Server 2005数据库镜像配
- Django中的Models 是什么?通常一个Model对应数据库的一张数据表, Django中Models以类似的形式表现, 它包含了一些
- 本文实例为大家分享了python tkinter库实现气泡屏保和锁屏的具体代码,供大家参考,具体内容如下显示效果如下:代码: im
- 设置Table的细边框通常有这么几种方式:1、设置边框的BORDER=0 、cellspacing=1,设置Table的背景色为所要的边框色