返回顶部
首页 > 资讯 > 后端开发 > Python >python迭代器模块itertools常用的方法
  • 789
分享到

python迭代器模块itertools常用的方法

2024-04-02 19:04:59 789人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言1.无限迭代器2.有限迭代器3.组合迭代器前言 itertools是python中内置的一种高效的生成各种迭代器或者是类的模块,这些函数的返回值为一个迭代器,经常被用在for

前言

itertools是python中内置的一种高效的生成各种迭代器或者是类的模块,这些函数的返回值为一个迭代器,经常被用在for循环中,当然,也可直接使用next()方法取值,今天就来说说itertools中的常用方法.

itertools按照迭代器的功能可分为三类:

  • 无限迭代器: 生成一个无限序列,比如自然数序列 1, 2, 3, 4, …
  • 有限迭代器: 接收一个或多个序列(sequence)作为参数,进行组合、分组和过滤等;
  • 组合迭代器: 序列的排列、组合,求序列的笛卡儿积等

1.无限迭代器

itertools.count(start=0, step=1)

创建一个迭代器,生成从n开始的连续整数,如果忽略n,则从0开始计算(注意:此迭代器不支持长整数),如果超出了sys.maxint,计数器将溢出并继续从-sys.maxint-1开始计算

  • start: 起始值,默认为0
  • step: 步长,默认为1
import itertools
a = itertools.count()
for x in a:
    if x > 5:
        break
    print(x)

输出:

1
2
3
4
5
6

b = itertools.count(2,3)
for x in b:
    if x > 10:
        break
    print(x)

输出:

2
5
8

itertools.cycle(iterable)

创建一个迭代器,对iterable中的元素反复执行循环操作,内部会生成iterable中的元素的一个副本,此副本用于返回循环中的重复项

iterable: 可迭代对象,可以为一个列表、字符串、元组等

import itertools
a = ['a','b','c']
i = 0
for x in itertools.cycle(a):
    i = i +1
    if i > 5:
        break
    print(i,x)

输出:

1,'a'
2,'b'
3,'c'
4,'a'
5,'b'

itertools.repeat(object[, times])

创建一个迭代器,重复生成object,times(如果已提供)指定重复计数,如果未提供times,将无止尽返回该对象

  • object: 需要重复的对象,对象是个整体
  • times: 重复次数
import itertools
for x in itertools.repeat([1,2,3],3):
    print(x)

输出:

[1,2,3]
[1,2,3]
[1,2,3]

2.有限迭代器

itertools.chain(iterable1, iterable2, …)

将多个迭代器作为参数, 但只返回单个迭代器, 它产生所有参数迭代器的内容, 就好像他们是来自于一个单一的序列
参数为多个可迭代对象,就好像被链条衔接起来了一样

import itertools
for x in itertools.chain([1,2,3],'abc'):
    print(x)

输出:

1
2
3
'a'
'b'
'c'

for x in itertools.chain([1,2,3],['a','b','c']):
    print(x)

输出:

1
2
3
'a'
'b'
'c'

itertools.chain.from_iterable(iterable)

接收一个可迭代对象作为参数,返回一个迭代器

from itertools import chain
a = [['first','second','thrid'],['a','b','c']]
b = [[1,2,3],[4,5,6]]
for x in range(len(a)):
    list(chain.from_iterable(zip(a[x],b[x])))

输出:

['first', 1, 'second', 2, 'thrid', 3]
['a', 4, 'b', 5, 'c', 6]

itertools.compress(data, selectors)

#可用于对数据进行筛选,当 selectors 的某个元素为 true 时,则保留 data 对应位置的元素,否则去除
#data: 待筛选数据
#selectors: 当为真时,保留data对应位的数据,为假或为空时则去除

from itertools import compress
for x in compress(['a','b','c','d'],[1,0,2]):
    print(x)

输出:

'a'
'c'
# 2 也为真,'d'对应值为空算假

itertools.dropwhile(predicate, iterable)

创建一个迭代器,只要函数predicate(item)为True,就丢弃iterable中的项,如果predicate返回False,就会生成iterable中的项和所有后续项,即第一个不满足条件的项及它后面所有的项都返回

  • predicate: 函数
  • iterable: 可迭代对象
from itertools import dropwhile
list(dropwhile(lambda x: x < 5, [1, 3, 6, 2, 1]))

输出:

[6,2,1]
#从6开始不符合x < 5 条件,所以6及6后面所有的项都需要返回

itertools.takewhile(predicate, iterable)

创建一个迭代器,如果predicate返回False,立即停止迭代

from itertools import takewhile
list(takewhile(lambda x: x < 5, [1, 3, 6, 2, 1]))

输出:

[1,3]

itertools.ifilter(predicate, iterable)

创建一个迭代器,仅生成iterable中predicate(item)为True的项,如果predicate为None,将返回iterable中所有计算为True的项

  • predicate: 函数
  • iterable: 可迭代对象
from itertools import ifilter
list(ifilter(lambda x: x < 5, [1, 3, 6, 2, 1]))

输出:

[1,3,2,1]

itertools.ifilterfalse(predicate, iterable)

创建一个迭代器,仅生成iterable中predicate(item)为False的项,如果predicate为None,将返回iterable中所有计算False的项,该函数正好跟ifilter相反

  • predicate: 函数
  • iterable: 可迭代对象
from itertools import ifilterfalse
list(ifilterfalse(lambda x: x < 5, [1, 3, 6, 2, 1]))

输出:

[6]

itertools.groupby(iterable[, key])

返回一个产生按照key进行分组后的值集合的迭代器

  • iterable:可迭代对象
  • key: 一个函数,该函数的返回值做为分组的标准
from itertools import groupby
a = ['aa', 'ab', 'abc', 'bcd', 'abcde']
for i, k in groupby(a, len):
     print (i, list(k))

输出:

2,['aa', 'ab']
3,['abc', 'bcd']
5,['abcde']

itertools.islice(iterable, stop)

iterable 是可迭代对象,start 是开始索引,默认为0,stop 是结束索引,step 是步长,默认为1,start 和 step 可选

from itertools import islice,count
list(islice([10, 6, 2, 8, 1, 3, 9], 5))

输出:

[[10, 6, 2, 8, 1]

list(islice(count(), 3, 10 ,2))

输出:

 [3,5,7,9]
 #这里的count()为文章第一个函数,用来产生无限序列

itertools.imap(func, iter1, iter2, iter3, …)

imap(func, iter1, iter2, iter3, …)
返回一个迭代器, 它是调用了一个其值在输入迭代器上的函数, 返回结果. 它类似于内置函数 map() , 只是前者在任意输入迭代器结束后就停止(而不是插入None值来补全所有的输入)
注意: 该函数在python3.x中已不存在,可直接使用map

from itertools import imap
list(imap(pow, [2, 3, 10], [4, 2, 3]))

输出:

[16, 9, 1000]
#pow函数 求指数

itertools.izip(*iterables)

用于将多个可迭代对象对应位置的元素作为一个元组,将所有元组『组成』一个迭代器,并返回
注意: 该函数在Python3.x中已不存在,可直接使用zip

from itertools import izip
for item in izip([1, 2, 3], ['a', 'b', 'c', 'd', 'e']):
    print(item)

输出:

(1, 'a')
(2, 'b')
(3, 'c')

*itertools.izip_longest(iterables, [fillvalue=None])

izip_longest 跟 izip 类似,但迭代过程会持续到所有可迭代对象的元素都被迭代完

注意: 该函数在python3.x中已不存在

from itertools import izip_longest
for item in izip_longest([1, 2, 3], ['a', 'b', 'c', 'd', 'e'],fillvalue='-'):
    print(item)

输出:

(1, 'a')
(2, 'b')
(3, 'c')
('-','d')
('-','e')

3.组合迭代器

*itertools.product(iterables[, repeat])

创建一个迭代器,生成表示item1,item2等中的项目的笛卡尔积的元组,repeat是一个关键字参数,指定重复生成序列的次数。
用来产生笛卡尔积

import itertools
a = (1, 2, 3)
b = ('A', 'B', 'C')
c = itertools.product(a,b)
for elem in c:
    print(elem)

输出:

(1, 'A')
(1, 'B')
(1, 'C')
(2, 'A')
(2, 'B')
(2, 'C')
(3, 'A')
(3, 'B')
(3, 'C')

list(product((0,1), (0,1), (0,1)))

输出:

[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]

list(product('ABC', repeat=2))

输出:

[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]

itertools.product的简单使用:

from itertools import product  # 迭代器

# test script
for i j in product(range(10),range(10))
    
print(i,j)
# 同理等于两个for循环嵌套,只是这种写法远行速度遍历会快一些,时间复杂度减小。
for x in range(10):
    for y in range(10):
    print(x,y)

itertools.permutations(iterable[, r])

创建一个迭代器,返回iterable中所有长度为r的项目序列,如果省略了r,那么序列的长度与iterable中的项目数量相同: 返回p中任意取r个元素做排列的元组的迭代器

from itertools import permutations
list(permutations('ABC', 2))

输出:

[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

itertools.combinations(iterable, r)

创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序 (不带重复)

from itertools import combinations
list(combinations('ABC', 2))

输出:

[('A', 'B'), ('A', 'C'), ('B', 'C')]

itertools.combinations_with_replacement(iterable, r)

创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序 (带重复)

from itertools import combinations_with_replacement
list(combinations_with_replacement('ABC', 2))

输出:

[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]

到此这篇关于python迭代器模块itertools常用的方法的文章就介绍到这了,更多相关python itertools 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python迭代器模块itertools常用的方法

本文链接: https://lsjlt.com/news/120485.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python迭代器模块itertools常用的方法
    目录前言1.无限迭代器2.有限迭代器3.组合迭代器前言 itertools是python中内置的一种高效的生成各种迭代器或者是类的模块,这些函数的返回值为一个迭代器,经常被用在for...
    99+
    2024-04-02
  • Python中的itertools模块的用法
    本篇内容主要讲解“Python中的itertools模块的用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中的itertools模块的用法”吧!在Python中有一个功能强大的迭代...
    99+
    2023-06-16
  • Python编程itertools模块处理可迭代集合相关函数
    容器与可迭代对象 在正式开始前先补充一些基本概念在 Python 中存在容器 与 可迭代对象 容器:用来存储多个元素的数据结构,例如 列表,元组,字典,集合等内容; ...
    99+
    2024-04-02
  • 一文详解Python中itertools模块的使用方法
    目录chain(*iterables)combinations(iterable: Iterable, r)combinations_with_replacement(it...
    99+
    2023-03-22
    Python itertools模块使用 Python itertools模块 Python itertools
  • python os模块常用方法
    python中的os模块可以用来编写于平台无关的一些文件系统操作。 主要的方法如下: 一些标记属性 1. os.linesep 文件中分割行的字符串 2. os.sep文件路径名的分隔符 3. os.curdir当前工作目录的字符串名称 4...
    99+
    2023-01-31
    模块 常用 方法
  • Python中itertools模块的使用教程详解
    目录itertools模块的介绍无限迭代器(Infinite Iterators)组合迭代器(Combinatoric Iterators)有限迭代器(Iterators Termi...
    99+
    2024-04-02
  • Python包argparse模块常用方法
    目录argparse介绍argparse实例argparse介绍   argparse包用于解释命令行参数。这里给出几个常用的方法。 # 创建解析器对象 # @para: descript...
    99+
    2022-06-02
    Python包argparse使用 Python argparse使用
  • 常用的python模块及安装方法
    adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheetahcherrypy:一个WEB frameworkctypes:用来调用动态链接库DBUtils:数...
    99+
    2023-01-31
    模块 常用 方法
  • Python json模块常用方法小结
    目录jons.loads()json.dump()json.load()json.dumps()JSON方法总结JSON(JavaScript Object Notation)是一种...
    99+
    2023-03-22
    Python json模块常用方法 Python json模块
  • Python中re模块的常用方法总结
    前言 正则表达式作为计算机科学的一个概念,通常被用来检索、替换那些符合某个规则的文本。正则表达式是对字符串操作的一种逻辑公式,用事先定义好的规则字符串对字符串进行过滤逻辑处理。 re...
    99+
    2024-04-02
  • python中的json模块常用方法汇总
    目录一、概述二、方法详解1.dump()2.dumps3.load4.loads三、代码实战1.dumps()2.dump()4.loads()一、概述 推荐使用参考网站: json...
    99+
    2024-04-02
  • Python threading模块的常用方法是什么
    本篇内容介绍了“Python threading模块的常用方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!说明threading.c...
    99+
    2023-06-30
  • Python json模块有哪些常用方法
    本文小编为大家详细介绍“Python json模块有哪些常用方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python json模块有哪些常用方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-07-05
  • 常用的python模块
    一、time与datetime模块1、在Python中,通常有这几种方式来表示时间:时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量格式化的时间字符串(Format String...
    99+
    2023-01-31
    模块 常用 python
  • python的常用模块
    os模块这个模块包含普遍的操作系统功能os.name:获取当前系统平台,Windows下返回'nt',Linux下返回'posix'。os.linesep:获取当前平台使用的行终止符。Windows下返回'/r/n',Linux使用'/n'...
    99+
    2023-01-31
    模块 常用 python
  • python常见模块与用法
    目录一、常见内置模块1.1什么叫做模块?1.2模块的分类1.3第三方的模块(需要安装)二、模块导入的问题三、random模块3.1randint() --------- 产生...
    99+
    2024-04-02
  • Python中OS模块有哪些常用的方法
    这篇文章将为大家详细讲解有关Python中OS模块有哪些常用的方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。import os# 系统操作print(os.sep)&...
    99+
    2023-06-14
  • python 之 os 模块的常见用法
    在Python的标准库os模块中包含普遍的操作系统功能os 模块引入的方法是: import os以下为 os 模块常见的使用方法:    1、os.getcwd 获取当前的工作目录,即程序执行的目录    2、os.name 字符串指示正...
    99+
    2023-01-31
    模块 常见 python
  • Python包argparse模块常用方法有哪些
    这篇文章给大家分享的是有关Python包argparse模块常用方法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。argparse介绍  argparse包用于解释命令行参数。这里给出几个常用的方法。#&n...
    99+
    2023-06-15
  • Python常用的模块和简单用法
    目录1、random 随机模块2、matplotlab.pyplot 作图模块3、mpl_toolkits.mplot3d 绘制3D图模块 1、random 随机模块 import ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作