■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

【Python】排列组合itertools & 集合set的更多相关文章

  1. python排列组合之itertools模块

    1. 参考 几个有用的python函数 (笛卡尔积, 排列, 组合) 9.7. itertools — Functions creating iterators for efficient loopi ...

  2. Python排列组合问题

    1.字符串的全排列 问题描述:打印出原字符串中所有字符的所有排列.——将输入字符串中的每个字符作为一个不同的字符看待,即使它们是重复的,如'aaa'应打印6次. Python可以用生成器解决: def ...

  3. python 排列组合

    笛卡尔积(product): 假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2) ...

  4. Python排列组合实验

    import itertools 排列: 4个数内选2个 >>> print list(itertools.permutations([1,2,3,4],2)) [(1, 2), ( ...

  5. Python排列组合

    product 笛卡尔积 (有放回抽样排列) permutations 排列 (不放回抽样排列) combinations 组合,没有重复 (不放回抽样组合) combinations_with_re ...

  6. python itertools模块实现排列组合

    转自:https://blog.csdn.net/specter11235/article/details/71189486 一.笛卡尔积:itertools.product(*iterables[, ...

  7. 排列组合python

    python 的 itertools模块 可以专业的处理的排列组合问题 写在自己博客里,怕下次找不到喽

  8. 数字货币量化教程——使用itertools实现各种排列组合

    在量化数据处理中,经常使用itertools来完成数据的各种排列组合以寻找最优参数 一.数据准备 import itertools items = [1, 2, 3] ab = ['a', 'b'] ...

  9. python 实现排列组合

    1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍. 2.一个列表数据任意组合 2.1主要是利用自带的库 #_*_ coding:utf-8 _*_ #__author__ ...

随机推荐

  1. 机器学习中应用到的各种距离介绍(附上Matlab代码)

    转载于博客:各种距离 在做分类时常常需要估算不同样本之间的相似性度量(SimilarityMeasurement),这时通常采用的方法就是计算样本间的"距离"(Distance). ...

  2. Java并发编程笔记4-线程池

    我们使用线程的时候就去创建一个线程,但是就会有一个问题: 如果并发的线程数量非常多,而且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会导致大大降低系统的效率,因为频繁创建线程和销毁线 ...

  3. tomcat原理(二)

    一.打包JavaWeb应用 在Java中,使用"jar"命令来对将JavaWeb应用打包成一个War包,jar命令的用法如下:

  4. 如何解决 touchstart 事件与 click 事件的冲突

    一 · 业务场景的描述 在对已完成的PC站点进行移动端适配时,我们想要站点在移动设备上有更快的响应速度,以带给用户更好的体验,此时,我们应该使用移动设备专用的事件系统,例如,使用 touchstart ...

  5. 主席树总结(经典区间第k小问题)(主席树,线段树)

    接着上一篇总结--可持久化线段树来整理吧.点击进入 这两种数据结构确实有异曲同工之妙.结构是很相似的,但维护的主要内容并不相同,主席树的离散化.前缀和等思想也要更难理解一些. 闲话 话说刚学习主席树的 ...

  6. 【POJ3207】Ikki's Story IV - Panda's Trick

    POJ 3207 Ikki's Story IV - Panda's Trick liympanda, one of Ikki's friend, likes playing games with I ...

  7. 【JSOI2008】星球大战 (并查集)

    题面 Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星 ...

  8. Splay树简单操作

    前几天刚刚自学了一下splay,发现思路真简单实现起来好麻烦 先贴一下头文件 # include <stdio.h> # include <stdlib.h> # includ ...

  9. LightOJ1341 Aladdin and the Flying Carpet

    题意 给一对数字 a,b ,a是一个长方形的面积,问有多少种整数的边的组合可以组成面积为a的长方形,要求最短的边不得小于b 数据组数T<=4000, a,b<=10^12 Solution ...

  10. [BZOJ1007] [HNOI2008] 水平可见直线 (凸包)

    Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的. 例如,对于直线:L1:y=x ...