zoukankan      html  css  js  c++  java
  • 一日一库—itertools

    #一日一库——itertools
    
    from itertools import count, chain
    import operator
    #=======count=========
    #count 实现了一个无限累加器,默认从0开始累加,当然我可以给count一个默认初始值
    #从这个初始值开始累加
    # count 内部实现了__iter__ __next__ 因此它是一个迭代器,可以用通过next来迭代
    
    c = count()
    print(c)
    print(next(c)) #0 第一次next返回默认值
    print(next(c)) #1 以后则累加
    
    #因此我可以for _ in c 产出无限大小值,但是不建议这样做,容易造成编辑器的卡死
    
    c1 = count(10)
    print(next(c1))
    
    cc = c1.__next__
    print(cc()) #11
    print(cc()) #12
    
    #=======chain=========
    #遍历所有的可迭代的对象,直到所有参数可迭代对象被遍历完,并返回一个生成器;
    a = chain('a我c', 'cde', 'fgh')
    print(a)
    # 可以通过chain.from_iterables();
    print(list(a.from_iterable(['ac', 'df']))) #['a', 'c', 'd', 'f
    
    
    from itertools import repeat, cycle, takewhile, dropwhile, filterfalse
    #=============repeat==============
    #这个函数没啥好说的,简单粗暴,参数2为要重复参数1的次数,返回一个迭代器
    print(list(repeat(2, 10)))
    print(list(repeat('ab', 10)))
    
    #==============takewhile==========
    #参数1为一个条件函数,常用lambda简写
    print(list(takewhile(lambda x: x<5, [1, 2, 4, 5, 3, 4, 10])))
    
    #===============dropwhile==========
    #参数1同样为一个条件函数,当条件满足是会丢弃迭代对象中满足条件的对象
    #值得注意的是只会丢弃第一个满足的对象之前的数值,之后的数值即使满足条件也会被输出,有点绕口
    #看下源码
    print(list(dropwhile(lambda x: x<5, [1, 2, 4, 5, 3, 4, 10]))) #print 5, 3, 4, 10
    '''
    def dropwhile(predicate, iterable):
        # dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1
        iterable = iter(iterable)
        for x in iterable:
            if not predicate(x):
                yield x
                break
        for x in iterable:
            yield x
    '''
    # 可以看到当遍历对象满足条件函数时,会跳出循环,由于遍历的是同一迭代器,迭代器会保存当前
    # 迭代下标,跳出循环后会继续迭代后续的对象
    
    #===============cycle===============
    #for _ in cycle('ABC'):
    #    print(_)
    #无脑的循环输出就完事了
    
    #======================filterfalse===========
    #类似之前的dropwhile、takewhile 都是根据条件函数,进行筛选数据
    #看源码
    '''
    def filterfalse(predicate, iterable):
        # filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8
        if predicate is None:
            predicate = bool
        for x in iterable:
            if not predicate(x):
                yield x
    '''
  • 相关阅读:
    golang recover
    golang sort
    golang matrix
    golang encoding/json
    go package的理解
    golang beego cache
    git操作
    阿里云图标使用
    Stylus的使用
    vue-preview的使用
  • 原文地址:https://www.cnblogs.com/alplf123/p/10628314.html
Copyright © 2011-2022 走看看