zoukankan      html  css  js  c++  java
  • 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)]

  • 相关阅读:
    知识【inline】
    .net实现文件或目录复制到指定目录 及 压缩
    asp实现页面打印功能
    C#创建Windows服务(附服务安装)
    导出合并行及合并列
    Abp添加DBContext
    Background Jobs 调用接口时间长解决
    DataTable去掉空行
    Maven配置
    二维码q
  • 原文地址:https://www.cnblogs.com/felixwa/p/5797862.html
Copyright © 2011-2022 走看看