Python itertools模块

itertools 是 Python 标准库中的一个模块,它提供了许多用于操作迭代对象的工具函数。这些函数可以高效地生成迭代器,用于处理序列和集合,特别适用于循环和组合数学。以下是 itertools 模块中一些常用函数的概述:

一、无限迭代器

  • itertools.count(start=0, step=1):从 start 开始,以 step 为步长无限生成数字。

    import itertools# 生成从 0 开始的无限序列
    for i in itertools.count():if i > 5:  # 为了避免无限循环,设置一个退出条件breakprint(i)
    

    在这里插入图片描述

  • itertools.cycle(iterable):无限循环遍历 iterable

    # 无限循环遍历列表
    for item in itertools.cycle(['a', 'b', 'c']):print(item)
    

    在这里插入图片描述

  • itertools.repeat(object[, times]):重复生成 object,如果指定了 times,则重复 times 次。

    # 重复生成 'hello' 3 次
    for item in itertools.repeat('hello', 3):print(item)
    

    在这里插入图片描述

二、有限迭代器

  • itertools.chain(*iterables):将多个迭代器连接成一个迭代器。

    # 连接两个列表
    for item in itertools.chain([1, 2, 3], [4, 5, 6]):print(item)
    

    在这里插入图片描述

  • itertools.compress(data, selectors):根据 selectors 的布尔值选择 data 中的元素。

    # 根据布尔值选择元素
    data = ['a', 'b', 'c', 'd']
    selectors = [True, False, True, False]
    for item in itertools.compress(data, selectors):print(item)
    

    在这里插入图片描述

  • itertools.dropwhile(predicate, iterable):从 iterable 中丢弃满足 predicate 的元素,直到第一个不满足的元素。

    # 丢弃满足条件的元素,直到第一个不满足的元素
    for item in itertools.dropwhile(lambda x: x < 3, [1, 2, 3, 4, 1, 2, 3, 4]):print(item)
    

    在这里插入图片描述

  • itertools.filterfalse(predicate, iterable):从 iterable 中选择不满足 predicate 的元素。

    # 选择不满足条件的元素
    for item in itertools.filterfalse(lambda x: x % 2 == 0, [1, 2, 3, 4, 5]):print(item)
    

    在这里插入图片描述

  • itertools.islice(iterable, start, stop[, step]):对 iterable 进行切片操作。

    # 切片操作
    for item in itertools.islice(range(10), 2, 8, 2):print(item)
    

    在这里插入图片描述

  • itertools.takewhile(predicate, iterable):从 iterable 中选择满足 predicate 的元素,直到第一个不满足的元素。

    # 选择满足条件的元素,直到第一个不满足的元素
    for item in itertools.takewhile(lambda x: x < 3, [1, 2, 3, 4, 1, 2, 3, 4]):print(item)
    

    在这里插入图片描述

  • itertools.tee(iterable, n=2):从单个迭代器创建多个独立的迭代器。

    # 创建多个独立的迭代器
    iter1, iter2 = itertools.tee(range(5), 2)
    for item in iter1:print(f'From iter1: {item}')
    for item in iter2:print(f'From iter2: {item}')
    

    在这里插入图片描述

三、组合生成器

  • itertools.product(*iterables, repeat=1):计算多个迭代器的笛卡尔积。

    # 计算笛卡尔积
    for item in itertools.product('AB', repeat=2):print(''.join(item))
    

    在这里插入图片描述

  • itertools.permutations(iterable, r=None):生成 iterable 中所有长度的排列。

    # 生成排列
    for item in itertools.permutations('ABC', 2):print(''.join(item))
    

    在这里插入图片描述

  • itertools.combinations(iterable, r):生成 iterable 中长度为 r 的组合。

    # 生成组合
    for item in itertools.combinations('ABC', 2):print(''.join(item))
    

    在这里插入图片描述

  • itertools.combinations_with_replacement(iterable, r):生成 iterable 中长度为 r 的组合,允许元素重复。

    # 生成允许元素重复的组合
    for item in itertools.combinations_with_replacement('ABC', 2):print(''.join(item))
    

    在这里插入图片描述

四、其他迭代器

  • itertools.accumulate(iterable[, func, *, initial=None]):生成累积结果的迭代器,可选地应用一个函数。

    # 生成累积结果
    for item in itertools.accumulate([1, 2, 3, 4]):print(item)
    

    在这里插入图片描述

  • itertools.groupby(iterable, key=None):根据 key 函数对 iterable 进行分组。

    # 根据条件分组
    for key, group in itertools.groupby('AAAABBBCCDAABBB'):print(key, list(group))
    

    在这里插入图片描述

  • itertools.starmap(function, iterable):将 iterable 中的元素作为参数传递给 function

    # 将元组作为参数传递给函数
    for item in itertools.starmap(pow, [(2, 5), (3, 2), (10, 3)]):print(item)
    

    在这里插入图片描述

五、迭代器实用函数

  • itertools.zip_longest(*iterables, fillvalue=None):类似于内置的 zip 函数,但会处理长度不同的迭代器,使用 fillvalue 填充缺失值。
    # 处理长度不同的迭代器
    for item in itertools.zip_longest('ABCD', 'xy', fillvalue='-'):print(''.join(item))
    
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何理解广角镜头和长焦镜头的区别。

为什么广角镜头的视野会比长焦镜头的视野大呢&#xff1f; 我之前用等光程解释了景深&#xff0c;也解释了为什么焦距越远&#xff0c;成像越大&#xff0c;但是从来没有提到过视野范围这个概念。实际上在我之前建立的数学模型中&#xff0c;物曲面S是无限大的&#xff0c;像曲…

保护您的机密:Foxit Reader PDF文件加密与解密全攻略

保护您的机密&#xff1a;Foxit Reader PDF文件加密与解密全攻略 引言 在数字化时代&#xff0c;保护敏感信息的安全比以往任何时候都更为重要。PDF文件作为一种流行的文档格式&#xff0c;广泛用于存储和交换数据。Foxit Reader不仅提供了阅读PDF的功能&#xff0c;还具备强…

掌握Emacs Verilog Mode:高效硬件开发指南

掌握Emacs Verilog Mode&#xff1a;高效硬件开发指南 引言 在硬件开发领域&#xff0c;Emacs Verilog Mode是一个强大的工具&#xff0c;它为Verilog硬件描述语言提供了专业的编辑支持。通过与Emacs的其他模式和工具集成&#xff0c;Verilog Mode不仅增强了代码编辑的效率&a…

管综 之 逻辑

1.复言命题 1.1假言推理 1.命题模型识别:当题干中出现如果那么&#xff0c;只有才&#xff0c;当且仅当等典型关联词时此题考的是简单假言推理问题 2.三步解题法:1️⃣:画箭头 2️⃣:递否 3️⃣:找答案 口诀&#xff1a; [口诀1]充分条件前推后 [口诀2]逆否命题等价于原命题 […

一加全机型TWRP合集/橙狐recovery下载-20240603更新-支持一加12/Ace3V手机

TWRP是目前安卓平台的刷机神器&#xff0c;可快速刷写第三方ROM或官方系统&#xff0c;刷入TWRP之前需要解锁BL&#xff0c;目前已适配一加多个机型。ROM乐园小编20240603整理&#xff0c;涵盖一加1到一加Ace3V多机型专用TWRP文件&#xff0c;个人机型橙狐recovery适配相对完整…

systemd在程序被kill -9时的动作

现象 今天在测试程序的时候发现&#xff0c;使用kill -9杀死程序之后&#xff0c;程序的资源回收动作依旧被执行了。 分析 执行 kill -9 abc&#xff0c;然后立即再执行ps -ef | grep abc&#xff0c;发现此时多了一个父进程为1的进程&#xff0c;正在执行abc service中定义…

自制HTML5游戏《贪吃蛇》

一、游戏简介 贪吃蛇是一款经典的电子游戏&#xff0c;最早在1976年由Gremlin公司推出&#xff0c;名为"Blockade"。游戏的玩法简单却富有挑战性&#xff0c;玩家控制一条蛇在封闭的场地内移动&#xff0c;通过吃食物增长身体&#xff0c;同时避免撞到自己的身体或场…

第3章 小功能大用处-Bitmaps、HyperLogLog、GEO

1.Bitmaps 1.1数据结构模型 现代计算机用二进制&#xff08;位&#xff09;作为信息的基础单位&#xff0c;1个字节等于8位&#xff0c;例 如“big”字符串是由3个字节组成&#xff0c;但实际在计算机存储时将其用二进制表 示&#xff0c;“big”分别对应的ASCII码分别是98、10…

22.智能指针(下)

标题 五、引用计数智能指针5.1 共享引用计数智能指针共享数据5.2 使用Box定义三个共享链表5.3 使用Rc代替Box5.4 引用计数增加实验 六、RefCell和内部可变性模式6.1 通过RefCell在运行时检查借用规则6.2 内部可变性&#xff1a;不可变值的可变借用1&#xff09;内部可变性的用例…

mysql数据库中模拟程序循环执行sql命令快速造数命令

解决复杂问题不可能通过一个 SQL 语句完成&#xff0c;我们需要执行多个 SQL 操作。流程控制语句的作用就是控 制存储过程中 SQL 语句的执行顺序&#xff0c;是我们完成复杂操作必不可少的一部分。只要是执行的程序&#xff0c;流程 就分为三大类&#xff1a; 顺序结构 &#x…

论文《Universal Graph Convolutional Networks》笔记

【UGCN】论文提出一个基本问题&#xff0c;即是否不同的网络结构属性应该采用不同的传播机制。通过实验发现&#xff0c;对于完全同配性、完全异配性和随机性的网络&#xff0c;1-hop、2-hop和k-nearest neighbor&#xff08;kNN&#xff09;邻居分别更适合作为信息传播的邻域。…

maven的安装以及配置

前言&#xff1a; Maven是一个强大的构建自动化工具&#xff0c;主要用于Java项目。它解决了软件开发中的两个方面&#xff1a; 构建和依赖管理&#xff1a;Maven通过在项目对象模型&#xff08;POM&#xff09;文件中指定依赖关系&#xff0c;简化了项目构建和依赖管理的过程…

【笔记】事务隔离级别以及MVCC解决幻读

事务提交可能碰到的问题&#xff1a; &#xff08;1&#xff09;脏读&#xff1a;事务1对数据进行修改但还没提交&#xff0c;事务2读取修改后的数据&#xff0c;之后事务1执行错误&#xff0c;回滚了&#xff0c;此时事务2的数据是错误的脏数据。 &#xff08;2&#xff09;不…

数学建模系列(2/4):建模入门

目录 引言 1. 如何开始数学建模 1.1 选择和描述问题 1.2 提出基本假设 1.3 确定模型类型 2. 建模的数学基础 2.1 线性代数基础 矩阵运算 线性方程组的解法 2.2 微分方程基础 常微分方程 偏微分方程 2.3 统计与概率基础 描述性统计 概率基础 3. 模型的求解方法 …

Linux中rm命令删除特定文件

在 Linux 中&#xff0c;你可以使用 rm 命令结合通配符来删除具有特定模式的文件&#xff0c;而不必输入完整的文件名。以下是一些常见的方法&#xff1a; 使用通配符&#xff1a; 使用星号&#xff08;*&#xff09;通配符可以匹配任意数量的字符。例如&#xff0c;如果你想要…

将Vite添加到您现有的Web应用程序

Vite&#xff08;发音为“veet”&#xff09;是一个新的JavaScript绑定器。它包括电池&#xff0c;几乎不需要任何配置即可使用&#xff0c;并包括大量配置选项。哦——而且速度很快。速度快得令人难以置信。 本文将介绍将现有项目转换为Vite的过程。我们将介绍别名、填充webp…

基于CSDN的Markdown文本编辑器的博客界面优化 | HTML | 文本标签 | 图像标签 | 个人主页引导

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 今天毛毛张分享的内容是如何在CSDN的Markdown编辑器中实现上图的效果&#xff0c;如果觉得能帮助到你的话就点击个人主页点点关注吧❗ 文章目录 1.前言2.基础知识3.字…

8、PHP 实现二进制中1的个数、数值的整数次方

题目&#xff1a; 二进制中1的个数 描述&#xff1a; 输入一个整数&#xff0c;输出该数二进制表示中1的个数。其中负数用补码表示。 <?phpfunction NumberOf1($n) {$count 0;if($n < 0){$n $n & 0x7FFFFFFF;$count;}while($n ! 0){$count;$n $n & ($n - 1…

(南京观海微电子)——DC-DC和LDO的原理及应用区别

LDO: 低压差线性稳压器&#xff0c;故名思意为线性的稳压器&#xff0c;仅能使用在降压应用中&#xff0c;也就是输出电压必需小于输入电压。 优点&#xff1a;稳定性好&#xff0c;负载响应快&#xff0c;输出纹波小。 缺点&#xff1a; 效率低&#xff0c;输入输出的电压…

直流电机双闭环控制仿真设计

1.设计题目 转速、电流双闭环直流调速系统的设计 2.设计任务 某晶闸管供电的双闭环直流调速系统&#xff0c;整流装置采用三相桥式电路&#xff0c; 基本数据为&#xff1a; 直流电动机&#xff1a;Unom220V&#xff0c;Inom136A&#xff0c;nnom1460r/min&#xff0c;Ra0…