Python的内建模块itertools的使用解析

 更新时间:2023年09月22日 11:29:45   作者:生有涯,知无涯  
这篇文章主要介绍了Python的内建模块itertools的使用解析,itertools是python的迭代器模块,itertools提供的工具相当高效且节省内存,Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数,需要的朋友可以参考下

itertools模块

itertools 是python的迭代器模块,itertools提供的工具相当高效且节省内存。Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数。

使用这些工具,你将能够创建自己定制的迭代器用于高效率的循环。

无限迭代器

(1)count(初值=0, 步长=1):

count 迭代器会返回从传入的起始参数开始的均匀间隔的数值。count 也可以接收指定的步长参数。

"""count(初值,步长)"""
from itertools import count
for i in count(10, 2):  # 从10开始,每步长隔2,无限循环(此案例演示大于100退出)
    if i > 100:
        break
    else:
        print(i)   # 打印结果:10,12,14,16,18,...,98,100

(2)islice(iterable,start,stop,步长)

从 10 开始,输出 5 个元素后结束。islice 的第二个参数控制何时停止迭代。但其含义并不是”达到数字 5 时停止“,而是”当迭代了 5 次之后停止“。

"""isslice(迭代器,迭代次数)"""
from itertools import islice
for i in islice(count(10), 5):
    print(i)   # 打印结果:10,11,12,13,14
for j in islice([1, 2, 3, 4, 5], 2):
    print(j)   # 打印结果:1,2 

(3)cycle:

这里我们创建了一个 for 循环,使其在三个字母 XYZ 间无限循环。当然,我们并不真地想要永远循环下去,所以我们添加了一个简单的计数器来跳出循环。

from itertools import cycle
count = 0
for item in cycle('XYZ'):
    if count > 7:
        break
    print(item)   # X,Y,Z,X,Y,Z,X,Y
    count += 1

(4)repeat():

负责把一个元素无限重复下去,不过如果提供第二个参数就可以限定重复次数:

from itertools import repeat
for i in repeat('1', 5):
    print(i)  # 1,1,1,1,1

可终止迭代器

(1)accumulate(可迭代对象[, 函数])   

accumulate 迭代器将返回累计求和结果,或者传入两个参数的话,由传入的函数累积计算的结果。默认设定为相加

from itertools import accumulate
for i in accumulate(range(7)):
    print(i)  # 0,1,3,6,10,15,21
for i in accumulate([1, 2, 3, 4, 5], lambda x, y: x * y):
    print(i)  # 1,2,6,24,120

(2)chain(*可迭代对象)   

chain 迭代器能够将多个可迭代对象合并成一个更长的可迭代对象。

from itertools import chain
x = chain(range(3), range(3, 5), [5, 6, 7], (8, 9), '11')
print(list(x))  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, '1', '1']

(3)groupby() groupby()把迭代器中相邻的重复元素挑出来放在一起:

from itertools import groupby
for key, group in groupby('AAABBBCCAAA'):
    print(key, list(group))
# 结果:
"""
A ['A', 'A', 'A']
B ['B', 'B', 'B']
C ['C', 'C']
A ['A', 'A', 'A']
"""

也可以使用函数,按照分组函数的值对元素进行分组

from itertools import groupby
x = groupby(range(10), lambda x: x < 5 or x > 8)
for condition, numbers in x:       
    print(condition, list(numbers))
# 结果:
"""
True [0, 1, 2, 3, 4]
False [5, 6, 7, 8]
True [9]
"""

(4)itertools.combinations(可迭代对象,组合个数)

求列表或生成器中指定数目的元素不重复的所有组合。

(5)itertools.combinations_with_replacement(可迭代对象,组合个数) 允许重复元素的组合

from itertools import combinations, combinations_with_replacement
x = combinations(['A', 'B', 'C'], 2)
y = combinations_with_replacement(['A', 'B', 'C'], 2)
print(list(x))  # [('A', 'B'), ('A', 'C'), ('B', 'C')]
print(list(y))  # [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]

(6)itertools.permutations(可迭代对象,组合个数) 产生指定数目的元素的所有排列(顺序有关)

from itertools import permutations
x = permutations(['A', 'B', 'C'], 3)
print(list(x))  # [('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]

itertools中combinations与permutations函数区别

import itertools
s = [1, 2, 3]
print(itertools.permutations(s, 2))     # 结果是一个迭代器
print(itertools.combinations(s, 2))     # 结果是一个迭代器
print(list(itertools.permutations(s, 2)))  # [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
print(list(itertools.combinations(s, 2)))  # [(1, 2), (1, 3), (2, 3)]

permutations和combinations都是得到一个迭代器。

combinations方法重点在组合,permutations方法重在排列。

到此这篇关于Python的内建模块itertools的使用解析的文章就介绍到这了,更多相关Python的itertools内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 只需7行Python代码玩转微信自动聊天

    只需7行Python代码玩转微信自动聊天

    今天小编就为大家分享一篇关于只需7行Python代码玩转微信自动聊天,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Django实现视频播放的具体示例

    Django实现视频播放的具体示例

    本文主要介绍了Django实现视频播放的具体示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下<BR>
    2022-05-05
  • Pytorch生成随机数Tensor的方法汇总

    Pytorch生成随机数Tensor的方法汇总

    这篇文章主要介绍了Pytorch生成随机数Tensor的方法汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • pycharm配置anaconda环境时找不到python.exe解决办法

    pycharm配置anaconda环境时找不到python.exe解决办法

    今天来说一下python中一个管理包很好用的工具anaconda,可以轻松实现python中各种包的管理,这篇文章主要给大家介绍了关于pycharm配置anaconda环境时找不到python.exe的解决办法,需要的朋友可以参考下
    2023-10-10
  • python调用tcpdump抓包过滤的方法

    python调用tcpdump抓包过滤的方法

    这篇文章主要为大家详细介绍了python调用tcpdump抓包过滤的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Python中FastAPI项目使用 Annotated的参数设计的处理方案

    Python中FastAPI项目使用 Annotated的参数设计的处理方案

    FastAPI 是一个非常现代化和高效的框架,非常适合用于构建高性能的 API,FastAPI 是一个用于构建 API 的现代、快速(高性能)web 框架,基于 Python 类型提示,这篇文章主要介绍了Python中FastAPI项目使用 Annotated的参数设计,需要的朋友可以参考下
    2024-08-08
  • Python调用Zoomeye搜索接口的实现

    Python调用Zoomeye搜索接口的实现

    本文主要介绍了Python调用Zoomeye搜索接口的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • python requests使用socks5的例子

    python requests使用socks5的例子

    今天小编就为大家分享一篇python requests使用socks5的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • 分析PyTorch Dataloader报错ValueError:num_samples的另一种可能原因

    分析PyTorch Dataloader报错ValueError:num_samples的另一种可能原因

    这篇文章主要介绍了分析PyTorch Dataloader报错ValueError:num_samples的另一种可能原因,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python构建一个文档扫描器的实现

    Python构建一个文档扫描器的实现

    本文主要介绍了Python构建一个文档扫描器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03

最新评论