Python中itertools 模块的用法

这篇具有很好参考价值的文章主要介绍了Python中itertools 模块的用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在 Python 中,迭代器是一种非常好用的数据结构,其最大的优势就是延迟生成,按需使用,从而大大提高程序的运行效率。而 itertools 作为 Python 的内置模块,就为我们提供了一套非常有用的用于操作可迭代对象的函数。

常用功能

1.count 功能详解

count(start=0,step=1) 函数有两个参数,其中 step 是默认参数,可选的,默认值为 1。 该函数返回一个新的迭代器,从 start 开始,返回以 step 为步长的均匀间隔的值。

import itertools
x = itertools.count(1,2)
for k in x:
	print(k, end=", ")

# 输出结果如下 无穷无尽
1, 3, 5, 7, 9, 11, 13, 15, ...

2.cycle 功能详解

cycle(iterable) 该函数会把接收到的序列无限重复下去。

import itertools
x = itertools.cycle("XYZ")
for k in x:
	print(k, end = ", ")
  
# 输出结果如下 无穷无尽
X, Y, Z, X, Y, Z, X, Y, Z, ...

注意,该函数可能需要相当大的辅助空间(取决于 iterable 的长度)。

3.repeat 功能详解

repeat(object, times) 该函数创建一个迭代器,不断的重复 object,当然如果指定 times 的话,则只会重复 times 次。

import itertools
x = itertools.repeat("XYZ")
for k in x:
	print(k, end = ", ")
  
# 输出结果如下 无穷无尽
XYZ, XYZ, XYZ, XYZ, XYZ, XYZ, ...
import itertools
x = itertools.repeat("XYZ", 3)
print(list(x))
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:153708845
# 输出结果如下 只会输出三次
['XYZ', 'XYZ', 'XYZ']

注意:无限循环迭代器只有在 for 循环中才会不断的生成元素,如果只是创建一个迭代器对象,则不会事先生成无限个元素。

4.chain 功能详解

chain(*iterables) 该函数创建一个新的迭代器,会将参数中的所有迭代器全包含进去。

import itertools
x = itertools.chain("abc", "xyz")
print(list(x))

# 输出结果如下
['a', 'b', 'c', 'x', 'y', 'z']

5.groupby 功能详解

groupby(iterable, key=None) 分组函数,将 key 函数作用于序列的各个元素。根据 key 函数的返回值将拥有相同返回值的元素分到一个新的迭代器。类似于 SQL 中的 GROUP BY 操作,唯一不同的是该函数对序列的顺序有要求,因为当 key 函数的返回值改变时,迭代器就会生成一个新的分组。因此在使用该函数之前需要先使用同一个排序函数对该序列进行排序操作。

import itertools
def sortBy(score):
	if score > 80:
		return "A"
	elif score >= 60:
		return "B"
	else:
		return "C"

scores = [81, 82, 84, 76, 64, 78, 59, 44, 55, 89]
for m, n in itertools.groupby(scores, key=sortBy):
	print(m, list(n))

# 输出结果如下
A [81, 82, 84]
B [76, 64, 78]
C [59, 44, 55]
A [89]

我们可以看到,该函数根据我们自定义的排序函数 sortBy 将列表中的元素进行了分组操作,只是我们发现最后一个怎么多了一个 A 的分组呢,这就是我们上面说所得「当 key 函数的返回值改变时,迭代器就会生成一个新的分组」。所以,我们需要事先对列表用 sortBy 函数排一下序。

scores = [81, 82, 84, 76, 64, 78, 59, 44, 55, 89]
scores = sorted(scores, key=sortBy)
for m, n in itertools.groupby(scores, key=sortBy):
	print(m, list(n))

# 输出结果如下
A [81, 82, 84]
B [76, 64, 78]
C [59, 44, 55]
A [89]

6.compress 功能详解

compress(data, selectors) 该函数功能很简单,就是根据 selectors 中的值判断是否保留 data 中对应位置的值。

import itertools
data = [81, 82, 84, 76, 64, 78]
tf = [1,1,0,1,1,0]
print(list(itertools.compress(data, tf)))

# 输出结果如下
[81, 82, 76, 64]

7.dropwhile 功能详解

dropwhile(predicate, iterable) 创建一个迭代器,从 predicate 首次为 false 时开始迭代元素。

import itertools
x = itertools.dropwhile(lambda x: x < 5, [1,3,5,7,4,2,1])
print(list(x))

# 输出结果如下
[5, 7, 4, 2, 1]

由以上得知,即使 predicate 首次为 false 后面的元素不满足 predicate 也同样会被迭代。

8.filterfalse 功能详解

filterfalse(predicate, iterable) 创建一个迭代器,返回 iterable 中 predicate 为 false 的元素。

import itertools
x = itertools.filterfalse(lambda x: x < 5, [1,3,5,7,4,2,1])
print(list(x))

# 输出结果如下
[5, 7]

9.islice 功能详解

islice(iterable, start, stop[, step]) 对 iterable 进行切片操作。从 start 开始到 stop 截止,同时支持以步长为 step 的跳跃。

import itertools
print(list(itertools.islice('123456789', 2)))
print(list(itertools.islice('123456789', 2, 4)))
print(list(itertools.islice('123456789', 2, None)))
print(list(itertools.islice('123456789', 0, None, 2)))

# 输出结果如下
['1', '2']
['3', '4']
['3', '4', '5', '6', '7', '8', '9']
['1', '3', '5', '7', '9']

10.starmap 功能详解

starmap(function, iterable) 从可迭代对象中获取参数来执行该函数。

import itertools
print(list(itertools.starmap(pow,[(2,10), (3,3)])))

# 输出结果如下
[1024, 27]

11.takewhile 功能详解

takewhile(predicate, iterable) 创建一个迭代器,遇到 predicate 为 false 则停止迭代元素。与 dropwhile 完全相反。

import itertools
x = itertools.takewhile(lambda x: x < 5, [1,3,5,7,4,2,1])
print(list(x))

# 输出结果如下
[1, 3]

12.product 功能详解

product(*iterables, repeat=1) 输出可迭代对象的笛卡尔积,有点类似于嵌套循环。其中 repeat 可以设置循环次数。

import itertools
print(list(itertools.product("ab", "12")))
print(list(itertools.product("ab", "ab")))
print(list(itertools.product("ab", repeat=2)))

# 输出结果如下
[('a', '1'), ('a', '2'), ('b', '1'), ('b', '2')]
[('a', 'a'), ('a', 'b'), ('b', 'a'), ('b', 'b')]
[('a', 'a'), ('a', 'b'), ('b', 'a'), ('b', 'b')]

13.permutations 功能详解

permutations(iterable, r=None) 返回 iterable 中长度为 r 的所有排列。默认值 r 为 iterable 的长度。即使元素的值相同,不同位置的元素也被认为是不同的。

import itertools
print(list(itertools.permutations("aba", r=2)))

# 输出结果如下
[('a', 'b'), ('a', 'a'), ('b', 'a'), ('b', 'a'), ('a', 'a'), ('a', 'b')]

14.combinations 功能详解

combinations(iterable, r=None) 返回 iterable 中长度为 r 的有序排列。默认值 r 为 iterable 的长度。 与 permutations 操作不同的是该函数严格按照 iterable 中元素的顺序进行排列。

import itertools
print(list(itertools.combinations("abc", r=2)))

# 输出结果如下
[('a', 'b'), ('a', 'c'), ('b', 'c')]

15.combinations_with_replacement 功能详解

combinations_with_replacement(iterable, r=None) 返回 iterable 中长度为 r 的有序排列。默认值 r 为 iterable 的长度。 与 combinations 操作不同的是该函数允许每个元素重复出现。

import itertools
print(list(itertools.combinations_with_replacement("abc", r=2)))
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:153708845
# 输出结果如下
[('a', 'a'), ('a', 'b'), ('a', 'c'), ('b', 'b'), ('b', 'c'), ('c', 'c')]

itertools 总结

本文总结了 itertools 模块的常规操作,学习并掌握这些极为便利的操作非常有助于提高自己的编码效率。文章来源地址https://www.toymoban.com/news/detail-854656.html

到了这里,关于Python中itertools 模块的用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python re模块用法详解

    re模块常用方法 re.compile() 该方法用来生成正则表达式对象,其语法格式如下: regex=re.compile(pattern,flags=0) 参数说明: pattern:正则表达式对象。 flags:代表功能标志位,扩展正则表达式的匹配。 re.findall() 根据正则表达式匹配目标字符串内容。 re.findall(pattern,string,flags=0) 该函数

    2024年02月09日
    浏览(46)
  • Python random模块用法整理

    随机数在计算机科学领域扮演着重要的角色,用于模拟真实世界的随机性、数据生成、密码学等多个领域。Python 中的 random 模块提供了丰富的随机数生成功能,本文整理了 random 模块的使用。 伪随机性 :Python 使用 random 模块生成各种分布的 伪随机数 。计算机生成的随机数都

    2024年02月11日
    浏览(37)
  • Python中pathlib 模块的用法

    pathlib 模块提供了表示文件系统路径的类,可适用于不同的操作系统。 使用 pathlib 模块,相比于 os 模块可以写出更简洁,易读的代码。pathlib 模块中的 Path 类继承自 PurePath,对 PurePath 中的部分方法进行了重载,相比于 os.path 有更高的抽象级别。 本文将带你学习如何使用 pat

    2024年04月17日
    浏览(37)
  • Python中operator 模块的用法

    operator 模块提供了一套与 Python 的内置运算符对应的高效率函数。 函数包含的种类有:对象的比较运算、逻辑运算、数学运算和序列运算 运算 函数 语法 小于 lt(a, b) a b 小于等于 le(a, b) a = b 大于 gt(a, b) a b 大于等于 ge(a, b) a = b 等于 eq(a, b) a == b 不等于 ne(a, b) a != b 实例: 运算

    2024年04月17日
    浏览(32)
  • Python中paramiko 模块的用法

    paramiko 是一个用 Python 语言编写的、遵循 SSH2 协议、支持以加密和认证方式进行连接远程服务器的模块。改模块可以对远程服务器进行一些命令或文件操作。 使用 pip3 安装 paramiko 模块 连接远程服务器 paramiko 模块连接远程服务器可以使用远程服务器的用户名、密码登录 在登录

    2024年04月13日
    浏览(34)
  • python基础教程:re模块用法详解

    前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 一、正则表达式的特殊字符介绍 正则表达式 👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~ 素材、视频教程、完整代码、插件安装教程我都准备好了,直接在文末名片自取就可 二、re模块的方法介绍 1、匹配类方

    2024年02月11日
    浏览(40)
  • python re 模块 findall 函数用法简述

    import re s = \\\"adfad asdfasdf asdfas asdfawef asd adsfas \\\"   reObj1 = re.compile(\\\'((w+)s+w+)\\\') reObj1.findall(s) [(\\\'adfad asdfasdf\\\', \\\'adfad\\\'), (\\\'asdfas asdfawef\\\', \\\'asdfas\\\'), (\\\'asd adsfas\\\', \\\'asd\\\')]   reObj2 = re.compile(\\\'(w+)s+w+\\\') reObj2.findall(s) [\\\'adfad\\\', \\\'asdfas\\\', \\\'asd\\\']   reObj3 = re.compile(\\\'w+s+w+\\\') reObj3.findall(s) [\\\'adfad asdfasdf\\\', \\\'as

    2024年01月18日
    浏览(39)
  • Python入门教程23:math模块的用法

    **math是Python 的一个内置模块,它提供了许多数学函数和常量,用于进行数学计算。**以下是一些常用的math模块中的函数和常量: math.pi:圆周率π的近似值,约等于3.14159。 math.e:自然对数的底数e的近似值,约等于2.71828。 math.sqrt(x):求平方根。 math.pow(x, y):求x的y次方。 ma

    2024年02月12日
    浏览(41)
  • Elasticsearch:ESQL 简介 — 一种用于灵活、迭代分析的新查询语言

    作者:Seth Payne 特别声明 :截止撰写该博文,在目前的公开发行版中,该功能还不能公开测试。这个功能将在未来的发行版中发布。 长期以来,Elastic Platform 一直被视为搜索用例和机器生成数据的分析系统。 分析专注于处理摄入的数据,其中重要的思想是如何在 Elasticsearch

    2023年04月23日
    浏览(33)
  • 【Python】Python 模块用法:selenium 4 版本页面元素定位方法汇总

    目录 一、定位页面元素方法源码说明  (1)Webdriver.common (2)selenium.webdriver.common.by (3)By 二、定位页面元素方法用法汇总 (1)2.0 及以下低版本 selenium :By 定位页面元素方法用法(可忽略) (2)3.0 ~ 3.9 版本 selenium:By 定位页面元素方法用法 (3)4.0 ~ 4.9 版本 selenium:

    2023年04月13日
    浏览(87)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包