Python itertools模块

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

一、无限迭代器

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

    import itertools
    
    # 生成从 0 开始的无限序列
    for i in itertools.count():
       if i > 5:  # 为了避免无限循环,设置一个退出条件
           break
       print(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))
    
    在这里插入图片描述
  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

YumOS

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

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

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

打赏作者

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

抵扣说明:

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

余额充值