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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于OpenCV与Python实现的身份证号码识别案例详解

    基于OpenCV与Python实现的身份证号码识别案例详解

    身份证识别技术主要依赖于计算机视觉和图像处理技术,通过对身份证图像进行分析,提取关键信息(如身份证号码、姓名等),这篇文章主要介绍了基于OpenCV与Python实现的身份证号码识别的相关资料,需要的朋友可以参考下
    2026-01-01
  • python数组如何添加整行或整列

    python数组如何添加整行或整列

    这篇文章主要介绍了python数组如何添加整行或整列问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • 5道关于python基础 while循环练习题

    5道关于python基础 while循环练习题

    这篇文章主要给大家分享的是5道关于python基础 while循环练习题,无论学习什么语言,练习都是必不可少的,下面文章的练习题挺精湛的,需要的朋友可以参考一下
    2021-11-11
  • 浅析python连接数据库的重要事项

    浅析python连接数据库的重要事项

    这篇文章主要介绍了python连接数据库的重要事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • python两个_多个字典合并相加的实例代码

    python两个_多个字典合并相加的实例代码

    这篇文章主要介绍了python两个_多个字典合并相加,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • python3 flask实现文件上传功能

    python3 flask实现文件上传功能

    这篇文章主要为大家详细介绍了python3 flask实现文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Python+Pygame实战之文字剧情游戏的实现

    Python+Pygame实战之文字剧情游戏的实现

    这篇文章主要为大家详细介绍了如何利用Python和Pygame实现两款文字剧情游戏——《巨龙之洞》和《太空矿工》,感兴趣的小伙伴可以了解一下
    2022-12-12
  • Python LeNet网络详解及pytorch实现

    Python LeNet网络详解及pytorch实现

    LeNet主要用来进行手写字符的识别与分类,并在美国的银行中投入了使用。本文主要为大家详细介绍了LetNet以及通过pytorch实现LetNet,感兴趣的小伙伴可以学习一下
    2021-11-11
  • django model通过字典更新数据实例

    django model通过字典更新数据实例

    这篇文章主要介绍了django model通过字典更新数据实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • 一分钟带你上手Python调用DeepSeek的API

    一分钟带你上手Python调用DeepSeek的API

    最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下Python如何快速上手调用DeepSeek API吧
    2025-02-02

最新评论