• itertools 介绍


    在python中itertool为python提供一系列迭代iterator的方法。

    第一个:组合 排列

    itertools.combinations(sq, r)

    该函数的作用是在列表sq中穷举所有的组合项目。 地一个参数是列表,第二个参数一个项中的个数。

    比如参数为‘abcd’和2。意思为从abcd中两两组合。 ab,ac,ad,bc,bd,cd

    import itertools
    str = 'abcd'
    com = itertools.combination(str, 2)
    print [item for item in com]
    

     结果:[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]

    这是组合,自然有排列。

    排列和组合的区别在于一个元素tuple内,先后顺序是否决定一个元素。比如(a,b)与(b,a),组合认为这是一个tuple,而排列认为这是两个。

    组合的函数有:combinations,combinations_with_replacement。 两者区别在于是否出现如(a,a),(b,b)这种元素。

    排列:product, permutations

    itertools.compress(list, selector):

    根据selector的true和false选择list中的字符

    比如list=‘abcd' selector=[1,2,0,0] 选择结果ab

    import itertools
    test = 'abcdefghijk'
    selector = [1,2,3,0,0,0,1,1,1,1,1]
    it = itertools.compress(test, selector)
    for [item for item in it]
    print [item for item in it]
    

     结果:['a', 'b', 'c', 'g', 'h', 'i', 'j', 'k']

    无限的函数

    itertools.count(start, step)

    从start开始,每次增长step。

    如itertools.count(2, 5)  迭代后  2, 7, 12, 17, 22, 27,。。。。。

    itertools.circle(p)

    圈,很形象的函数名称。将p列表周而复始的迭代。

    如itertools.circle('abcd'), 结果: a b c d a b c d a b c d a b c d......

    itertools.repeat(elem, n)

    将elem循环n次,如果没有参数n,无限循环。

    itertools.repeat('abc', 4) 结果 abc abc abc abc

    itertools.repeat('ab') 结果:ab ab ab 。。。。

    根据条件选择内容:

    itertools.dropwhile(pred, list)

    itertools.takewhile(pred, list)

    将list内容元素放入pred中进行判断,如果为True, dropwhile:丢弃, takewhile:保留。

    import itertools
    test = [3,4,5,6,7,8,9]
    it = itertools.dropwhile(lambda x:x<6, test)
    print [item for item in it]
    it = itertools.takewhile(lambda x:x<6, test)
    print [item for item in it]
    

     结果:[6, 7, 8, 9]    [3, 4, 5]

    类似函数:ifilter, ifilterfalse

    函数调用

    itertools.imap(func, para1list, para2list,×)

    从para1list和para2list获取参数调用函数func。

    import itertools
    def func(a, b, c):
        return a + b + c
    list1 = [1,2,3,4]
    list2 = [5,6,7,8]
    list3 = [0,1,0,1]
    it = itertools.imap(func, list1, list2, list3)
    print [item for item in it]
    

      结果:[6, 9, 10, 13]

    类似函数:starmap

    打包:

    itertools.izip(list1, list2,*)

    将list1中的元素与list2中的元素对应位置成为一个tuple。

    list1 = [1,2,3,4]
    list2 = [5,6,7,8]
    list3 = [0,1,0,1]
    it = itertools.izip(list1, list2, list3)
    print [item for item in it]
    

      结果:[(1, 5, 0), (2, 6, 1), (3, 7, 0), (4, 8, 1)]

    如果列表长度不一致,返回最短。

    list1 = [1,2,3,4]
    list2 = [5,6]
    list3 = [0,1,0,1]
    it = itertools.izip(list1, list2, list3)
    print [item for item in it]
    

      结果:[(1, 5, 0), (2, 6, 1)]

    如果希望根据最长的列表返回,这就需要对短的列表进行填充。

    list1 = [1,2,3,4]
    list2 = [5,6]
    list3 = [0,1,0,1]
    it = itertools.izip_longest(list1, list2, list3, fillvalue='x')
    print [item for item in it]
    

      结果:[(1, 5, 0), (2, 6, 1), (3, 'x', 0), (4, 'x', 1)]

  • 相关阅读:
    HearthBuddy投降插件2019-11-01的使用
    正则表达式在线分析 regex online analyzer
    Tips to write better Conditionals in JavaScript
    The fileSyncDll.ps1 is not digitally signed. You cannot run this script on the current system.
    Cannot capture jmeter traffic in fiddler
    JMETER + POST + anti-forgery token
    input type color
    HearthBuddy修改系统时间
    What are all the possible values for HTTP “Content-Type” header?
    UDK性能优化
  • 原文地址:https://www.cnblogs.com/felixwa/p/5797862.html
Copyright © 2020-2023  润新知