【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
【Python】排列组合itertools & 集合set的更多相关文章
- python排列组合之itertools模块
1. 参考 几个有用的python函数 (笛卡尔积, 排列, 组合) 9.7. itertools — Functions creating iterators for efficient loopi ...
- Python排列组合问题
1.字符串的全排列 问题描述:打印出原字符串中所有字符的所有排列.——将输入字符串中的每个字符作为一个不同的字符看待,即使它们是重复的,如'aaa'应打印6次. Python可以用生成器解决: def ...
- python 排列组合
笛卡尔积(product): 假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2) ...
- Python排列组合实验
import itertools 排列: 4个数内选2个 >>> print list(itertools.permutations([1,2,3,4],2)) [(1, 2), ( ...
- Python排列组合
product 笛卡尔积 (有放回抽样排列) permutations 排列 (不放回抽样排列) combinations 组合,没有重复 (不放回抽样组合) combinations_with_re ...
- python itertools模块实现排列组合
转自:https://blog.csdn.net/specter11235/article/details/71189486 一.笛卡尔积:itertools.product(*iterables[, ...
- 排列组合python
python 的 itertools模块 可以专业的处理的排列组合问题 写在自己博客里,怕下次找不到喽
- 数字货币量化教程——使用itertools实现各种排列组合
在量化数据处理中,经常使用itertools来完成数据的各种排列组合以寻找最优参数 一.数据准备 import itertools items = [1, 2, 3] ab = ['a', 'b'] ...
- python 实现排列组合
1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍. 2.一个列表数据任意组合 2.1主要是利用自带的库 #_*_ coding:utf-8 _*_ #__author__ ...
随机推荐
- 移动端开发利器vConsole.js,app内嵌H5开发时调试用
vConsole:一个轻量.可拓展.针对手机网页的前端开发者调试面板,主要还是用于内嵌app页面时在手机上进行调试,打印完全和在PC端一样,方便大家找出问题所在. 不说废话直接进入主题,vConsol ...
- R+openNLP︱openNLP的六大可实现功能及其在R语言中的应用
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- openNLP是NLP中比较好的开源工具,R语 ...
- javascript 一些关于css操作的函数
// 通过样式表 获得css样式 //obj 表示dom对象,name 表示css属性 比如width等 function getStyle(obj,name){ if(obj.currentStyl ...
- 【mongodb系统学习之十】mongodb查询(二)
5).常用查询条件: a).比较操作符:"$lt","$lte","$gt","$gte",分别是<,<=, ...
- Flex读取txt文件中的内容(一)
Flex读取txt文件中的内容 phone.txt: 13000003847 13000003848 13000003849 13000003850 13000003851 13000003852 1 ...
- Caused by: org.h2.jdbc.JdbcSQLException: Table "T_STUDENT_INFO" not found; SQL statement
1.错误描述 org.hibernate.exception.SQLGrammarException: error executing work at org.hibernate.exception. ...
- VxWorks启动过程详解(下)
上一节主要是从映像的分类和各种映像的大致加载流程上看VxWorks的启动过程,这一节让我们从函数级看一下VxWorks的启动过程: 1. Boot Image + Loadable Images: 下 ...
- 从零一起学Spring Boot之LayIM项目长成记(四) Spring Boot JPA 深入了解
前言 本篇内容主要是一些关于JPA的常用的一些用法等.内容也是很多是看其他博客学来的,顺道在本系列博客里抽出一篇作为总结.下面让我们来看看吧. 不过我更推荐大家读本篇:https://lufficc. ...
- TestLink和RedMine的集成
1. TestLink的安装 1.1. TestLink简介 TestLink是一个php语言开发的开源免费的测试管理工具,包括产品测试需求,测试计划,测试用例的创建和执行, ...
- 浅析Java 8新特性Lambda Expression
什么是Lambda Expression 对于Lambda Expression,我的理解是,它是一个函数表达式,如下: (int x, int y) -> x - y 符号左边定义了函数的输入 ...