• python中的itertools模块简单使用


    itertools

    高效循环下创建循环器的标准库

    Infinite itertools,无限迭代器

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

    默认返回一个从0开始,依次+10的自然数迭代器,如果你不停止,它会一直运行下去。
    可以用start指定开始的位置,step是步长。

    import itertools
    
    c = itertools.count(start=0, step=1)
    for i in c:
        print(i)
    
        
    # 0
    # 10
    # 20
    # 30
    # 40
    # 50
    # ...
    

    itertools.cycle(iterable)

    传入一个可迭代对象,然后无限循环迭代。

    import itertools
    
    # itertools.count()
    l = [1,2,3,4,5]
    c = itertools.cycle(l)
    
    for i in c:
        print(i)
    
    
    # 1
    # 2
    # 3
    # 4
    # 5
    # 1
    # 2
    # 3
    # 4
    # 5
    # ...
    

    itertools.repeat(p_object, times=None)

    重复迭代一个对象p_object,如果不指定times,则会迭代无数次,也可以通过times参数指定迭代的次数。

    import itertools
    
    # itertools.count()
    l = [1,2,3,4,5]
    c = itertools.repeat(l, 5)
    
    for i in c:
        print(i)
    
    
    # [1, 2, 3, 4, 5]
    # [1, 2, 3, 4, 5]
    # [1, 2, 3, 4, 5]
    # [1, 2, 3, 4, 5]
    # [1, 2, 3, 4, 5]
    

    Iterators terminating on the shortest input sequence

    itertools.accumulate(iterable, func)

    返回序列的累计值或者其他二进制函数。

    import itertools
    
    # itertools.count()
    l = [1,2,3,4,5]
    c = itertools.accumulate(l)
    
    print(c)
    
    for i in c:
        print(i)
    
    
    # 1
    # 3
    # 6
    # 10
    # 15
    

    accumulate()仍然返回的是一个迭代器,传一个list,在for循环中遍历打印的时候发现,它做了累加操作。(迭代第一个数,就是前一个数的和,迭代到第二个数时,就是前两个数的和,以此类推)

    并且做递加操作时支持:list, tuple, str, set, dict

    传入的是dict对象,那么会累加迭代dict的key:

    import itertools
    
    # itertools.count()
    d = {'a': 1, 'b': 2, 'c': 3}
    c = itertools.accumulate(d)
    
    print(c)
    
    for i in c:
        print(i)
    
    
    # <itertools.accumulate object at 0x000001F7A0A90E48>
    # a
    # ab
    # abc
    

    itertools.chain(*iterables)

    chain()方法中的参数可以传入多个序列,而且只要是序列即可,不限定序列的数据类型。

    如:迭代list, tuple, str三个序列

    import itertools
    
    l = [1, 2, 3, 4, 5]
    t = (1, 2, 3, 4, 5)
    s = 'abcdefg'
    c = itertools.chain(l, t, s)
    
    print(c)
    
    for i in c:
        print(i)
    
    
    # <itertools.chain object at 0x0000026E64801448>
    # 1
    # 2
    # 3
    # 4
    # 5
    # 1
    # 2
    # 3
    # 4
    # 5
    # a
    # b
    # c
    # d
    # e
    # f
    # g
    

    itertools 笛卡尔积

    import itertools
    
    d = [
        [{"a": 1}, {"b": 2}], [{"c": 3}, {"d": 4}, {"e": 5}], [{"f": 6}, {"g": 7}]
    ]
    
    print(*d)
    
    for i in itertools.product(*d):
        print(i)
    
    # [{'a': 1}, {'b': 2}] [{'c': 3}, {'d': 4}, {'e': 5}] [{'f': 6}, {'g': 7}]
    # ({'a': 1}, {'c': 3}, {'f': 6})
    # ({'a': 1}, {'c': 3}, {'g': 7})
    # ({'a': 1}, {'d': 4}, {'f': 6})
    # ({'a': 1}, {'d': 4}, {'g': 7})
    # ({'a': 1}, {'e': 5}, {'f': 6})
    # ({'a': 1}, {'e': 5}, {'g': 7})
    # ({'b': 2}, {'c': 3}, {'f': 6})
    # ({'b': 2}, {'c': 3}, {'g': 7})
    # ({'b': 2}, {'d': 4}, {'f': 6})
    # ({'b': 2}, {'d': 4}, {'g': 7})
    # ({'b': 2}, {'e': 5}, {'f': 6})
    # ({'b': 2}, {'e': 5}, {'g': 7})
    
    抟扶摇而上者九万里
  • 相关阅读:
    router使用以及vue的动画效果
    配置wbepack
    Axios插件和loading的实现
    自定义组件的 v-model
    组件模块化使用
    组件基础
    vue的使用1
    solt插槽的使用。
    Vue的使用
    Vue的router使用
  • 原文地址:https://www.cnblogs.com/fengting0913/p/15504283.html
Copyright © 2020-2023  润新知