zoukankan      html  css  js  c++  java
  • 【Python】排列组合itertools & 集合set

    ■itertools

    利用python的itertools可以轻松地进行排列组合运算

    itertools的方法基本上都返回迭代器

    比如

    •itertools.combinations('abcd',2)

        这个方法从序列abcd中任选两个进行组合,返回一个迭代器,以tuple的形式输出所有组合,如('a','b'),('a','c')....等等。总共是C24 =6种组合

    itertools.permutations('abc',2)

        和combinations类似,为排序,输出的迭代器,里面内容是('a','b'),('b','a')....等等,一共是A2 3=6种组合

    itertools.product('abc','123')

        相当于是下面这样的代码

    for element1 in list1:
        for element2 in list2:
            yield element1,element2

         计算多个迭代器的笛卡尔积。

    itertools.combinations_with_replacement('abc',2)

        和combinations相比之差别在于可重复,即结果中会有('a','a'),('b','b')等出现

    ==============================================

    除了以上纯排列组合之外,itertools还提供很多很便利的方法

    itertools.imap()与map函数相似,但是返回迭代器

        比如imap(pow,[1,2],[1,2])

        //函数做参数,后跟若干个iterable对象。跟几个取决于前面那个函数有几个参数。而imap的操作是讲多个iterable对象中的元素一一对应地进行给出的函数操作

        在这个例子中,最终迭代器中的内容就是pow(1,1)=1,pow(2,2)=4,pow(3,3)=27

    itertools.compress('ABCD',[1,0,1,0])

        根据后者列表中的1和0所指出的真假情况,取舍前面给出的序列中的值,返回这些值为内容的迭代器

        这个例子中最后的内容就是'A'和'C'

    itertools.chain(list1,list2...)

        将参数中的iterable对象按顺序合并起来,返回的迭代器将按顺序给出这些对象中的元素

        如果list(chain(list1,list2,list3...))相当于是list1+list2+list3...把这几个list合并起来了

    itertools.count(n)

        返回一个无限的迭代器,内容是从n开始一个一个往上加的整数

    itertools.cycle(list)

        返回一个无限迭代器,不断迭代list中的所有内容

    itertools.ifilter(func,seq)

        对seq中的元素一个一个依次放进func,func是个针对某个值做出判断返回True或者False的函数。

        返回的迭代器里面的内容仅为经过func判断后为True的那些元素,和filter()类

    ■set

      set不是python的一个模块,但是它是个很吊的东西,因为它支持的是集合和集合操作

      set(...)是个函数,也是一种数据结构,表明某个对象已经成为了一个集合,同时set类型的数据也是iterable的

    构造集合

        set(某个iterable对象) //set构造时会自动除去参数对象中重复的元素

    >>> s = set([0,0,1,1,2,2])
    >>> s
    set([0,1,2])

    对集合元素的一些操作

        s.add(...)   向集合中添加一项

        s.update([...])   添加一个iterable对象(也可以是集合),当然已经出现在s中的元素不会再重复出现

        s.remove(...)    删除一个元素

        s.discard(...)    一个元素若存在则删除(类似字典的get方法)

        x (not) in s    判断一个集合是否含有元素

        s.issubset(t) 或者 s<=t    判断s是否是t的子集

        s & t    交集

        s |t    并集

        s - t    差集

    *对集合的处理往往是暂时的,最终可以用类似于[i for i in s]的方法将set转化为list

     

  • 相关阅读:
    【MySQL】MySQL之备份
    【MySQL】MySQL之导入和导出
    MySQL逻辑备份之MySQLDump
    【Perl】Linux下安装Perl
    【MySQL】MySQL NDB Cluster维护
    【MySQL】MySQL NDB Cluster安装
    Linux服务器开启ssh服务,实现ssh远程登陆!
    PDO异常处理
    PHP异常处理
    PDO中的事务处理
  • 原文地址:https://www.cnblogs.com/franknihao/p/6533010.html
Copyright © 2011-2022 走看看