Python编程必备:itertools库功能全解析!

大家好,我是涛哥,今天为大家分享itertools库常用功能,并且为大家提供示例,全文5000字,大约阅读15分钟。

什么是 itertools

itertools是Python的一个内置模块,它提供了一系列用于迭代的函数,可用于有效地创建迭代器,组合、操作和处理数据。下面是一些itertools中最常用的功能:

1. 无限迭代器

itertools.count(start, step)

itertools.count(start, step)函数用于生成一个无限迭代的整数序列。它从 start 开始,并以 step 作为步长不断生成整数。

以下是一个展示 itertools.count() 的示例代码:

import itertools

# 从 5 开始,步长为 2,生成整数序列
for i in itertools.count(5, 2):
    if i > 20:
        break
    print(i, end=' ')

在这个示例中,itertools.count(5, 2) 生成一个从 5 开始,步长为 2 的整数序列。这个序列将生成满足条件 i > 20 的整数,并在满足条件后停止迭代。

itertools.cycle(iterable)

itertools.cycle(iterable)函数用于创建一个无限循环迭代器,不断重复提供的可迭代对象中的元素。

以下是一个演示 itertools.cycle() 的示例代码:

import itertools

# 定义一个列表
data = [1, 2, 3]

# 使用 cycle 无限重复可迭代对象中的元素
for i in itertools.cycle(data):
    print(i, end=' ')
    if i == 3:  # 为避免无限循环,手动设定循环结束条件
        break

在这个例子中,itertools.cycle(data) 会不断重复列表 [1, 2, 3] 中的元素。因为这是一个无限循环,这里手动设置了 if i == 3 的条件来结束循环。

itertools.repeat(elem, times)

itertools.repeat(elem, times) 函数用于创建一个迭代器,该迭代器将不断重复生成 elem 元素,最多重复 times 次。

以下是一个演示 itertools.repeat() 的示例代码:

import itertools

# 使用 repeat 重复生成元素
for i in itertools.repeat(10, 3):
    print(i, end=' ')

在这个例子中,itertools.repeat(10, 3) 生成一个重复生成元素 10 的迭代器,总共重复 3 次。结果将是 10 10 10

2. 组合生成器

itertools.permutations(iterable, r)

itertools.permutations(iterable, r) 函数用于生成可迭代对象中所有长度为 r 的排列。

以下是一个演示 itertools.permutations() 的示例代码:

import itertools

# 定义一个列表
letters = ['a', 'b', 'c']

# 使用 permutations 生成排列
for perm in itertools.permutations(letters, 2):
    print(perm)

在这个示例中,itertools.permutations(letters, 2) 生成了长度为 2 的排列。它会生成由给定列表中元素的所有可能排列组成的迭代器。在此示例中,生成了长度为 2 的排列,例如 ('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'c'), ('c', 'a'), ('c', 'b')

itertools.combinations(iterable, r)

itertools.combinations(iterable, r) 函数用于生成可迭代对象中所有长度为 r 的组合,不考虑元素顺序。

以下是一个演示 itertools.combinations() 的示例代码:

import itertools

# 定义一个列表
letters = ['a', 'b', 'c']

# 使用 combinations 生成组合
for comb in itertools.combinations(letters, 2):
    print(comb)

在这个示例中,itertools.combinations(letters, 2) 生成了长度为 2 的组合。它会生成由给定列表中元素的所有可能组合组成的迭代器,不考虑元素的顺序。在此示例中,生成了长度为 2 的组合,例如 ('a', 'b'), ('a', 'c'), ('b', 'c')

itertools.product(*iterables, repeat=1)

itertools.product(*iterables, repeat=1)函数用于生成可迭代对象的笛卡尔积,即所有输入可迭代对象中元素的排列组合。

以下是一个演示 itertools.product() 的示例代码:

import itertools

# 定义多个列表
colors = ['red', 'blue']
shapes = ['circle', 'square']
sizes = ['small', 'large']

# 使用 product 生成笛卡尔积
for prod in itertools.product(colors, shapes, sizes):
    print(prod)

在这个示例中,itertools.product(colors, shapes, sizes) 生成了多个列表的笛卡尔积。它会生成由给定列表中元素的所有可能排列组成的迭代器。在此示例中,生成了颜色、形状和尺寸的所有可能组合,如 ('red', 'circle', 'small'), ('red', 'circle', 'large'), ('red', 'square', 'small'), 等等。

3. 迭代器的处理

itertools.chain(*iterables)

itertools.chain(*iterables) 函数用于将多个可迭代对象连接成一个迭代器,按照它们在参数中出现的顺序依次输出元素。

以下是一个演示 itertools.chain() 的示例代码:

import itertools

# 定义多个可迭代对象
numbers = [1, 2, 3]
colors = ['red', 'blue']

# 使用 chain 连接多个可迭代对象
merged = itertools.chain(numbers, colors)

# 打印结果
for m in merged:
    print(m, end=' ')

在这个示例中,itertools.chain(numbers, colors) 连接了两个列表 numberscolors。它会将这两个可迭代对象的元素顺序连接起来,以创建一个单一的迭代器。这样,可以按顺序依次输出元素,结果会是 1 2 3 red blue

itertools.islice(iterable, stop)

itertools.islice() 函数,从一个迭代器或可迭代对象中获取前 stop 个元素,返回一个生成器来产生这些元素。

下面是一个更加详细的示例代码,说明了 itertools.islice() 的用法:

import itertools

# 定义一个简单的列表
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 使用 islice 获取前 5 个元素
sliced_data = itertools.islice(data, 5)

# 打印结果
print("前 5 个元素:")
for d in sliced_data:
    print(d, end=' ')

# 使用 islice 获取索引 2 到 5 之间的元素
sliced_data = itertools.islice(data, 2, 5)

# 打印结果
print("\n\n索引 2 到 5 之间的元素:")
for d in sliced_data:
    print(d, end=' ')

# 使用 islice 获取索引 1 到 9 之间,步长为 2 的元素
sliced_data = itertools.islice(data, 1, 9, 2)

# 打印结果
print("\n\n索引 1 到 9 之间,步长为 2 的元素:")
for d in sliced_data:
    print(d, end=' ')

这段代码展示了 itertools.islice() 函数的几种用法。它演示了从给定列表中截取出不同范围的元素,包括开始、结束和步长参数。

itertools.filterfalse(predicate, iterable)

itertools.filterfalse() 函数可以返回在给定可迭代对象中,predicate 条件为假的所有元素。

以下是一个演示 itertools.filterfalse() 的示例代码:

import itertools

# 定义一个简单的函数,用于检查奇数
def is_even(x):
    return x % 2 == 0

# 定义一个列表
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 使用 filterfalse 选取所有偶数
filtered_data = itertools.filterfalse(is_even, data)

# 打印结果
print("所有奇数:")
for d in filtered_data:
    print(d, end=' ')

在这个示例中,定义了一个简单的 is_even() 函数来检查一个数是否为偶数。然后,使用 itertools.filterfalse() 函数从列表中过滤出所有不满足偶数条件的元素。

4. 其他有用的函数

itertools.groupby(iterable, key=None)

itertools.groupby()函数可以将一个可迭代对象中相邻且相同的元素分组在一起。这个函数返回一个生成器,每个生成器包含一个键和对应的迭代器,这个迭代器生成与该键相同的元素。

以下是一个展示 itertools.groupby() 的示例代码:

import itertools

# 定义一个列表,里面包含重复元素
data = [1, 1, 2, 2, 2, 3, 4, 4, 4, 4, 5]

# 使用 groupby 将相邻且相同的元素分组
grouped_data = itertools.groupby(data)

# 打印结果
print("分组后的元素:")
for key, group in grouped_data:
    print(f"键: {key}, 对应的组: {list(group)}")

在这个例子中,itertools.groupby() 函数将相邻且相同的元素分在一组。它检查每个元素,如果相邻元素相同,则将它们放在一组中。

itertools.dropwhile(predicate, iterable)

itertools.dropwhile() 函数是用于过滤可迭代对象的工具。它会丢弃满足特定条件的元素,直到遇到第一个不满足条件的元素,然后返回剩余的元素。一旦遇到第一个不满足条件的元素,后续的元素都将被保留。

以下是一个展示 itertools.dropwhile() 的示例代码:

import itertools

# 定义一个简单的函数,用于检查是否小于5
def less_than_five(x):
    return x < 5

# 定义一个列表
data = [1, 3, 5, 2, 4, 6, 7, 8]

# 使用 dropwhile 丢弃满足条件的元素
filtered_data = itertools.dropwhile(less_than_five, data)

# 打印结果
print("不满足条件的元素:")
for d in filtered_data:
    print(d, end=' ')

在这个示例中,定义了一个 less_than_five() 函数,用于检查一个数是否小于5。然后,使用 itertools.dropwhile() 函数来从列表中删除所有小于5的元素。

itertools.takewhile(predicate, iterable)

itertools.takewhile() 函数用于从可迭代对象中获取元素,直到遇到不满足指定条件的元素为止。一旦条件不再满足,函数将停止迭代并返回之前满足条件的元素。

以下是一个示例代码,展示了 itertools.takewhile() 函数的用法:

import itertools

# 定义一个简单的函数,用于检查是否小于5
def less_than_five(x):
    return x < 5

# 定义一个列表
data = [1, 3, 5, 2, 4, 6, 7, 8]

# 使用 takewhile 选取满足条件的元素
filtered_data = itertools.takewhile(less_than_five, data)

# 打印结果
print("满足条件的元素:")
for d in filtered_data:
    print(d, end=' ')

在这个示例中,定义了一个 less_than_five() 函数,用于检查一个数是否小于5。然后,使用 itertools.takewhile() 函数从列表中获取所有满足条件的元素(小于5的元素),直到遇到第一个不满足条件的元素为止。

今天的分享到这里就结束了,更多Python学习内容,http://ipengtao.com/ 

唉,今年真的太难了。。。

干货笔记整理

  100个爬虫常见问题.pdf ,太全了!

Python 自动化运维 100个常见问题.pdf

Python Web 开发常见的100个问题.pdf

124个Python案例,完整源代码!

PYTHON 3.10中文版官方文档

耗时三个月整理的《Python之路2.0.pdf》开放下载

最经典的编程教材《Think Python》开源中文版.PDF下载

b5e38838e0357e59297b0a91498ff7f3.png

007a7ca0cfb85e2a550eb059cffadad0.gif

点击阅读原文,获取更多学习内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/131662.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

动态规划:918. 环形子数组的最大和

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《算法》 文章目录 前言一、题目解析二、解题思路解题思路状态表示状态转移方程初始化填表顺序返回值 三、代码实现总结 前言 本篇文章仅是作为小白的我的一些理解&#xff0c;&#xff0c;…

PyGWalker :数据分析中最优秀工具库!

假设你在 Jupyter Notebook 中有一堆数据需要分析和可视化。PyGWalker 就像一个神奇的工具&#xff0c;使这一切变得非常容易。它接受你的数据并将其转换成一种特殊的表格&#xff0c;你可以像使用 Tableau 一样与之交互。 你可以通过视觉方式探索数据&#xff0c;进行互动&am…

字符串的模式匹配(朴素模式匹配算法,KMP算法)

目录 1.朴素模式匹配算法1.定义2.算法实现3.代码实现 2.KMP算法1.优化思路2.next数组3.代码实现 3.求next数组4.KMP算法优化1.next数组的优化2.求nextval数组 1.朴素模式匹配算法 子串&#xff1a;主串的一部分&#xff0c;一定存在。 模式串&#xff1a;不一定能在主串中找到。…

基于超宽带技术的人员定位系统源码,spring boot+ vue+ mysql定位系统源码

​UWB定位技术源码 超宽带技术的人员定位系统源码 UWB人员定位系统是一种基于超宽带技术的人员定位系统&#xff0c;它通过发送和接收超短脉冲信号&#xff0c;在测距方面可以达到微米级精度。这种系统通常需要具备高精度的定位能力&#xff0c;通常需要达到微米级别&#xff0…

11个最受欢迎的3D打印AI软件【2023】

如今&#xff0c;人工智能&#xff08;AI&#xff09;似乎已经成为每个人都在谈论的话题。 尽管围绕该技术的伦理问题存在着重要的讨论&#xff0c;但不可否认的是&#xff0c;人工智能可能成为包括 3D 打印在内的许多不同行业的重要工具。 事实上&#xff0c;人工智能在 3D 打…

C 语言 switch 语句

C 语言 switch 语句 在本教程中&#xff0c;您将通过一个示例学习在C语言编程中创建switch语句。 switch语句使我们可以执行许多代替方案中的一个代码块。 虽然您可以使用if…else…if阶梯执行相同的操作。但是&#xff0c;switch语句的语法更容易读写。 switch … case的语…

2014年计网408

第一题 在 OSI 参考模型中, 直接为会话层提供服务的是()A. 应用层B. 表示层C. 传输层D. 网络层 运输层是会话层的相邻下层&#xff0c;它为会话层直接提供服务。运输层也称为传输层。 第二题 某以太网拓扑及交换机当前转发表如下图所示, 主机 00-e1-d5-00-23-a1 向主机 00−…

【MATLAB源码-第76期】基于模拟退火算法(SA)的无人机三维地图路径规划,输出最短路径和适应度曲线

操作环境&#xff1a; MATLAB 2022a 1、算法描述 模拟退火算法是一种启发式优化算法&#xff0c;通常用于解决组合优化问题&#xff0c;例如旅行商问题和图着色问题。它模拟了固体材料在退火过程中逐渐冷却达到稳定状态的行为&#xff0c;以寻找问题的全局最优解。 以下是模…

在IDEA中使用maven项目总结

一 什么是maven Maven本身也是Java写的&#xff0c;他是一款服务于Java平台的自动化构建工具 Maven是一个项目管理工具&#xff0c;旨在简化软件项目的构建、依赖管理和项目信息管理。它使用基于项目对象模型&#xff08;Project Object Model&#xff0c;POM&#xff09;的…

【算法与设计模式】

一、数据结构与算法 1、算法性能评估 时间复杂度、空间复杂度 2、数据结构 数组与列表 队列 堆栈 链表 二叉树 多叉树 递归算法 二、设计模式 1、单例 &#xff08;1&#xff09;GIL&#xff1a;线程互斥锁。保证同一时刻只有一个线程在进行。 &#xff08;2&#xff09…

初学前端CSS教案(理论+代码+效果图)

文章目录&#xff1a; 一&#xff1a;前言 1.什么是CSS呢&#xff1f; 2.环境 3.HTML5相关 4.瞅瞅CSS代码样式什么样&#xff1f; 二&#xff1a;编码规范 1.声明 2.注释 3.选择器 3.1 块元素选择器{} 3.2 id选择器 " # " 3.3 class选择器 " . &quo…

【算法-哈希表1】哈希表有什么用? 来看看 有效的字母异位词 和 两数组的交集.

今天&#xff0c;带来哈希相关算法的讲解。文中不足错漏之处望请斧正&#xff01; 理论基础点这里 有效的字母异位词 1. 思路 暴力的解法&#xff0c;需要两层for循环&#xff0c;同时还要记录字符是否重复出现&#xff0c;很明显时间复杂度是 O(n^2)。 其实可以用哈希表来…

【物联网】继续深入探索ADC模拟转数字的原理——Flash ADC流水线ADC逐次逼近型SAR ADC

这篇文章主要弥补上一篇关于ADC的不足&#xff0c;更加深入了解ADC数模转换器的工作原理&#xff0c;举例常见的三种ADC&#xff0c;分别为Flash ADC&流水线ADC&逐次逼近型SAR ADC。 【物联网】深入了解AD/DA转换技术&#xff1a;模数转换和数模转换 文章目录 一、模拟…

765. 情侣牵手(困难)

首先不考虑已经正确坐在一起的组合在没有坐在一起的组合中&#xff0c;只有当两对情侣互相配对时只需要一次交换操作就可以使得两对情侣完成匹配&#xff0c;其余情况交换数等于情侣对数可以把所有情侣看成一个大集合&#xff0c;这个大集合是可以拆成若干小集合的&#xff0c;…

超全总结!探索性数据分析 (EDA)方法汇总!

探索性数据分析&#xff08;EDA&#xff09;是一种系统地分析、可视化和总结数据集的过程&#xff0c;以获取洞察并更好地理解数据中潜在的模式和趋势。 EDA是任何数据分析项目中的重要步骤&#xff0c;因为它有助于识别数据中的潜在问题和偏见。EDA有助于为建模和进一步分析奠…

08 # 手写 filter 方法

什么是 filter filter() 方法创建给定数组一部分的浅拷贝&#xff0c;其包含通过所提供函数实现的测试的所有元素。如果没有元素通过测试&#xff0c;则返回一个空数组。 ele&#xff1a;表示数组中的每一个元素index&#xff1a;表示数据中元素的索引array&#xff1a;表示数…

.NET快速对接极光消息推送

什么是消息推送&#xff1f; 很多手机APP会不定时的给用户推送消息&#xff0c;例如一些新闻APP会给用户推送用户可能感兴趣的新闻&#xff0c;或者APP有更新了&#xff0c;会给用户推送是否选择更新的消息等等&#xff0c;这就是所谓的“消息推送”。 常见的一些APP消息推送…

lv11 嵌入式开发 ARM体系结构理论基础(异常、微架构)4

1 异常概念 处理器在正常执行程序的过程中可能会遇到一些不正常的事件发生 这时处理器就要将当前的程序暂停下来转而去处理这个异常的事件 异常事件处理完成之后再返回到被异常打断的点继续执行程序 2 异常处理机制 不同的处理器对异常的处理的流程大体相似&#xff0c…

CMakeCache.txt有什么用

2023年11月11日&#xff0c;周六上午 CMakeCache.txt 是由 CMake 自动生成的一个缓存文件&#xff0c;用于记录在配置过程中生成的各种变量和选项的值。 在使用 CMake 构建项目时&#xff0c;CMake 会根据 CMakeLists.txt 文件中的配置和命令&#xff0c;解析项目的源代码并生…

机器学习算法——线性回归与非线性回归

目录 1. 梯度下降法1.1 一元线性回归1.2 多元线性回归1.3 标准方程法1.4 梯度下降法与标准方程法的优缺点 2. 相关系数与决定系数 1. 梯度下降法 1.1 一元线性回归 定义一元线性方程 y ω x b y\omega xb yωxb 则误差&#xff08;残差&#xff09;平方和 C ( ω , b ) …