《Python Cookbook 3rd》笔记(4.9):排列组合的迭代
排列组合的迭代
问题
你想迭代遍历一个集合中元素的所有可能的排列或组合
解法
itertools 模块提供了三个函数来解决这类问题。 其中一个是itertools.permutations() ,它接受一个集合并产生一个元组序列,每个元组由集合中所有元素的一个可能排列组成。也就是说通过打乱集合中元素排列顺序生成一个元组,比如:
>>> items = ['a', 'b', 'c']
>>> from itertools import permutations
>>> for p in permutations(items):
... print(p)
...
('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')
>>>
如果你想得到指定长度的所有排列,你可以传递一个可选的长度参数。就像这样:
>>> for p in permutations(items, 2):
... print(p)
...
('a', 'b')
('a', 'c')
('b', 'a')
('b', 'c')
('c', 'a')
('c', 'b')
>>>
使用 itertools.combinations() 可得到输入集合中元素的所有的组合。比如:
>>> from itertools import combinations
>>> for c in combinations(items, 3):
... print(c)
...
('a', 'b', 'c')
>>> for c in combinations(items, 2):
... print(c)
...
('a', 'b')
('a', 'c')
('b', 'c')
>>> for c in combinations(items, 1):
... print(c)
...
('a',)
('b',)
('c',)
>>>
对于 combinations() 来讲,元素的顺序已经不重要了。也就是说,组合 (‘a’,‘b’) 跟 (‘b’, ‘a’) 其实是一样的 (最终只会输出其中一个)。
在计算组合的时候,一旦元素被选取就会从候选中剔除掉(比如如果元素’a’已经被选取了,那么接下来就不会再考虑它了)。而 函数itertools.combinations_with_replacement() 允许同一个元素被选择多次,比如:
>>> for c in combinations_with_replacement(items, 3):
... print(c)
...
('a', 'a', 'a')
('a', 'a', 'b')
('a', 'a', 'c')
('a', 'b', 'b')
('a', 'b', 'c')
('a', 'c', 'c')
('b', 'b', 'b')
('b', 'b', 'c')
('b', 'c', 'c')
('c', 'c', 'c')
>>>
讨论
尽管你也可以自己手动实现排列组合算法,但是这样做得要花点脑力。当我们碰到看上去有些复杂的迭代问题时,最好可以先去看看 itertools 模块。如果这个问题很普遍,那么很有可能会在里面找到解决方案!
《Python Cookbook 3rd》笔记(4.9):排列组合的迭代相关推荐
- 《Python Cookbook 3rd》笔记汇总
文章目录 一.数据结构 二.字符串和文本 三.数字.日期和时间 四.迭代器与生成器 五.文件与IO 一.数据结构 标题 关键词 1.1:拆分序列后赋值给多个变量 可迭代对象.拆分赋值 1.2:拆分任意 ...
- 《Python Cookbook 3rd》笔记(1.4):查找最大或最小的N个元素
<Python Cookbook 3rd>1.4:查找最大或最小的N个元素 问题 怎样从一个集合中获得最大或者最小的N个元素列表? 解法 heapq 模块有两个函数:nlargest()和 ...
- 《Python cookbook》笔记二
<Python cookbook>笔记二 第二章 字符串和文本 -使用多个界定符分割字符串- 你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定 的. # str ...
- Machine Learning with Python Cookbook 学习笔记 第9章
Chapter 9. Dimensionality Reduction Using Feature Extraction 前言 本笔记是针对人工智能典型算法的课程中Machine Learning w ...
- Machine Learning with Python Cookbook 学习笔记 第6章
Chapter 6. Handling Text 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放在代码压缩 ...
- Python Cookbook 3rd Edition Documentation
Python Cookbook 3rd Edition Documentation 文章目录 第一章:数据结构和算法 1.1 解压序列赋值给多个变量 问题 解决方案 讨论 1.2 解压可迭代对象赋值给 ...
- Machine Learning with Python Cookbook 学习笔记 第8章
Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...
- [python Cookbook]阅读笔记
@toc] 前记:为了补充一下python语法知识,感谢网友的推荐阅读了pythonCookbook,这本书确实不错,以问题为导向,引导解决思路. 这个博文是从阅读笔记typora中直接复制过来的没有 ...
- python计算组合数_Python实现的排列组合计算操作示例
Python实现的排列组合计算操作示例 本文实例讲述了Python实现的排列组合计算操作.分享给大家供大家参考,具体如下: 1. 调用 scipy 计算排列组合的具体数值 >> from ...
最新文章
- todo:DSB and ISB
- SAP内向交货详解 Details on SAP inbound delivery
- netty依赖_高性能:《一遍文章带你看懂 Netty世界》
- ms sql 触发器( 转)
- linux单点登录命令,配置RHEV中LINUX 虚拟机使用ACTIVE DIRECTORY(AD域)实现单点登录的方法...
- robot framework好的学习网址
- 学习SQL:INNER JOIN与LEFT JOIN
- Ext JS4百强应用:设置textfield的悬浮提示信息 --第8强
- matlab ctrl c,Matlab:实现CTRL + C的功能,但在代码中
- Matlab给二维函数图像标注极值点
- 计算机网络实验一 验证性实验
- 股票量化分析(11)——第二个策略(5日移动均线、双均线、MACD策略)
- java数组 处理函数 chunk_数组分组chunk的一种写法
- 约瑟夫问题 pku1012(转自奋斗青春(亚伟)blog)
- 用MATLAB求解小鸭过河曲线
- Table does not have the identity property. Cannot perform SET operation.
- 风帆头,旗帜服,“背”在肩上的古国王印
- elasticsearch es sum求和统计用法
- HDU2550 百步穿杨
- 视觉中国财报背后的版权门余波
热门文章
- 串口通讯编程一日通1(整合资料) .
- Windows CE下流驱动的动态加载
- android studio adb 命令行,Android Studio如何配置adb以及经常使用命令
- java vo转map_JAVA Map转换为Bean或VO
- python time perf_Python Time 的学习笔记
- 【转】setsocketopt getsocketopt比较全的参数说明
- 【转】什么是ERP、SCM、CRM?
- Azure Blob Storage 基本用法 -- Azure Storage 之 Blob
- 24组合模式(Composite Pattern)
- mq集群要建传输队列吗_面试官:消息队列这些我必问!