• python中的itertools模块


    Python 内置的 itertools 模块包含了一系列用来产生不同类型迭代器的函数或类,这些函数的返回都是一个迭代器,我们可以通过 for 循环来遍历取值,也可以使用 next() 来取值。

    itertools 模块提供的迭代器函数有以下几种类型:

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

    无限迭代器

    itertools 模块提供了三个函数(事实上,它们是类)用于生成一个无限序列迭代器:

    • count(firstval=0, step=1)

      创建一个从 firstval (默认值为 0) 开始,以 step (默认值为 1) 为步长的的无限整数迭代器

    • cycle(iterable)

      对 iterable 中的元素反复执行循环,返回迭代器

    • repeat(object [,times]

      反复生成 object,如果给定 times,则重复次数为 times,否则为无限

    组合生成器

    itertools 模块还提供了多个组合生成器函数,用于求序列的排列、组合等:

    • product
    • permutations
    • combinations
    • combinations_with_replacement

    product

    product 用于求多个可迭代对象的组合,它跟嵌套的 for 循环等价。它的一般使用形式如下:

    product(iter1, iter2, ... iterN, [repeat=1])
    for item in itertools.product('abcd', 'xyz'):
        print(item)

    输出为:

    ('a', 'x')
    ('a', 'y')
    ('a', 'z')
    ('b', 'x')
    ('b', 'y')
    ('b', 'z')
    ('c', 'x')
    ('c', 'y')
    ('c', 'z')
    ('d', 'x')
    ('d', 'y')
    ('d', 'z')

    permutations

    permutations 用于生成一个排列,它的一般使用形式如下:

    permutations(iterable[, r])

    其中,r 指定生成排列的元素的长度,如果不指定,则默认为可迭代对象的元素长度。

    list(permutations('ABC'))

    结果为:

    [('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
    list(permutations('ABC', 2))

    结果为:[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

     

    combinations

    combinations 用于求序列的组合,它的使用形式如下:

    combinations(iterable, r)
    list(combinations('ABC', 2))

    结果为:[('A', 'B'), ('A', 'C'), ('B', 'C')]

    itertools 模块提供了很多用于产生多种类型迭代器的函数,它们的返回值不是 list,而是迭代器。

     
  • 相关阅读:
    How to Enable Trace or Debug for APIs executed as SQL Script Outside of the Applications ?
    Android中MVC、MVP、MVVM具体解释
    破坏性创新第一原则
    Android学习笔记(八)——显示运行进度对话框
    Hadoop知识汇总
    mybatis collection和association使用区别
    mybatis $和#
    IDEA新建一个多maven模块工程(有图)
    可输入的下拉框
    springboot 使用i18n进行国际化
  • 原文地址:https://www.cnblogs.com/a-little-v/p/11027973.html
Copyright © 2020-2023  润新知