Python3,一款内置、强大且必会的迭代器,建议收藏。

1、引言

小鱼:小屌丝,我问问你你?
小屌丝:问我?我没做错啥吧?
小鱼:那倒没有,就是想问问你一件事。
小屌丝:惊慌失措… 这… 我最近可是认真的看书,没做啥事。
小鱼:你慌什么? 我还没问呢。
小屌丝:(⊙o⊙)… 那你问,问…吧~
小鱼:也没有别的事,你知道迭代器吗?
小屌丝:唉… 迭代器啊, 那我知道啊
小鱼:噢,那你说说,迭代器。
小屌丝:range。
小鱼:嗯,继续说。
在这里插入图片描述

小屌丝:鱼哥,你说吧,我可能不善言辞。
小鱼:我xxxx,跟我想的一样。
小屌丝:你都预料到了,还来问我。
小鱼:怪我咯
在这里插入图片描述

2、itertools

2.1 定义

其实迭代器,不仅仅range,在Python内置库有一个很强大的迭代器,
如果没印象的话,可以看看小鱼的这篇博客《Python3,不知道Python内置库函数,不要错过这篇,必须收藏!!!

当然,今天我们基于这篇,在进行拓展,让我们看看,python内置库的强大。

话不多说,我上一张图, 先感受一下迭代器的功能。
在这里插入图片描述

接着,就是我们今天的主角, itertools

  • itertools是Python内置的一个非常强大的模块,提供了许多用于创建迭代器的函数。
  • 它可以生成一系列有用的结果集合,而不需要创建中间列表,这大大节省了空间并且提高了效率。

接下来,我们就看看itertools强大的功能。

2.2 常用功能

2.2.1 无限迭代器

  • count():接收两个可选整形参数,第一个指定迭代开始的值,第二个指定迭代的步长。
    • 例如,itertools.count(10, 2) 将生成一个从10开始的,每次增加2的无限迭代器。
  • cycle():用一个可迭代对象中的元素来创建一个迭代器,并且复制自己的值,一直无限的重复下去。
    • 例如,itertools.cycle(“abcd”) 将创建一个无限的迭代器,不断重复输出 “abcd”。
  • repeat():将一个元素重复 n 遍或者无穷多遍,并返回一个迭代器。
    • 例如,itertools.repeat(“abcd”, 5) 将创建一个迭代器,重复输出 “abcd” 五次。

2.2.2 组合迭代器

  • combinations_with_replacement():从输入的可迭代对象中生成所有有重复元素的组合。
    • 例如,itertools.combinations_with_replacement([‘A’, ‘B’, ‘C’, ‘D’], 3) 将生成所有从 [‘A’, ‘B’, ‘C’, ‘D’] 中取3个元素且允许重复的组合。

2.2.3 其他常用函数

  • islice():用于切割可迭代对象,返回一个迭代器。
    • 例如,itertools.islice(range(10), 3, 7) 将从 range(10) 中切割出索引从3到7的部分,返回一个迭代器。
  • tee():用于将一个可迭代对象复制到多个通道,返回一个迭代器。
    • 例如,itertools.tee(range(10), 3) 将把 range(10) 复制到3个通道,返回一个包含3个迭代器的元组。
  • product():用于计算输入可迭代对象的笛卡尔积。
    • 例如,itertools.product([‘A’, ‘B’, ‘C’], [1, 2]) 将计算出所有 [‘A’, ‘B’, ‘C’] 和 [1, 2] 的排列组合。
  • pairwise():从 Python 3.10 引入的一个方法,用于按顺序返回一个可迭代对象中每两个相邻的元素构成的元组的列表。
    • 例如,itertools.pairwise(range(5)) 将返回 [(0, 1), (1, 2), (2, 3), (3, 4)]。

看到这里,是不是瞬间觉得,这个itertools还挺香的呢。

2.3 代码示例

因为内置库, 所以,不需要安装,我们直接调用内置库就可以哦了

2.3.1 count()

count(): 创建一个无限递增或递减的整数序列。

  • Demo1:无限递增
# -*- coding:utf-8 -*-
# @Time   : 2023-11-26
# @Author : carl_DJ

from itertools import count

#无限递增整数序列,达到20,跳出循环

for i in count(1):
	print(i)
	if i >20:
		break

运行结果

在这里插入图片描述

  • Demo2:无限递减
# -*- coding:utf-8 -*-
# @Time   : 2023-11-26
# @Author : carl_DJ

from itertools import count

#从10开始递减整数,直到-1
for i in count(10,-1):
	print(i)
	if i < 0:
		break

运行结果
在这里插入图片描述

2.3.2 cycle()

cycle(): 将可迭代对象变为无限循环迭代器。

# -*- coding:utf-8 -*-
# @Time   : 2023-11-26
# @Author : carl_DJ

from itertools import cycle

my_list = ['A', 'B', 'C']
for char in cycle(my_list):
    print(char)
    if char == 'C':
        break

运行结果
在这里插入图片描述

2.3.3 combinations()

combinations(): 返回给定 iterable 的所有组合。

# -*- coding:utf-8 -*-
# @Time   : 2023-11-26
# @Author : carl_DJ

import itertools

s = "ABCD"
for i in range(2, len(s)+1):
    for subset in itertools.combinations(s, i):
        print(subset)

运行结果
在这里插入图片描述

2.3.4 product()

product(): 返回笛卡尔积(所有可能的排列)。

# -*- coding:utf-8 -*-
# @Time   : 2023-11-26
# @Author : carl_DJ

from itertools import product

a = [1,2]
b = [3,4]

print(list(product(a,b)))

运行结果
在这里插入图片描述

3、总结

看到这里, 关于itertools的知识的分享,也差不多该完事了。
在实际的工作中, itertools的使用频次还是很高的。
所以,至于迭代器,不要仅仅 局限于range哦。

多尝试些新的技能,还是很有好处的哦。

我是小鱼

  • CSDN 博客专家
  • 阿里云 专家博主
  • 51CTO博客专家
  • 51认证讲师等
  • 认证金牌面试官
  • 职场面试及培训规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)测评一、二等奖获得者

关注小鱼,带你学习更多更专业更前言的人工智能相关技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Carl_奕然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值