Python 进阶 —— itertools
itertools,顾名思义,用作迭代的工具,它不会直接返回一个序列,而是返回一个可迭代的对象,用于 for 循环迭代取出,或者 list comprehension。
1. permutations vs combinations
A_n^k=\frac{n!}{(n-k)!}\\ C_n^k=\frac{n!}{(n-k)!k!}
也即排列是组合的 k!k!,当 k=2k=2 时,排列是组合的 2 倍;
也即是数学(组合数学)上的排列组合,permutation 对顺序敏感({1, 2}, {2, 1} 是不同的排列),combination 对顺序不敏感({1, 2, 3}, {1, 3, 2}, … 都是相同的组合)。
(1)实现 C23=3C_3^2=3(组合 3 者之中的两个)
>>> from itertools import combinations, permutations >>> seq = ['r', 'g', 'b'] >>> for c in combinations(seq, 2):print(c) ('r', 'g') ('r', 'b') ('g', 'b')
(2)实现 A23=6A_3^2=6(排列三者之中的两个)
>>> from itertools import combinations, permutations >>> seq = ['r', 'g', 'b'] >>> for c in permutations(seq, 2):print(c) ('r', 'g') ('r', 'b') ('g', 'r') ('g', 'b') ('b', 'r') ('b', 'g')
注意,permutations 方法并不去除重复项:
>> list(permutations([1, 1, 2]))
[(1, 1, 2), (1, 2, 1), (1, 1, 2), (1, 2, 1), (2, 1, 1), (2, 1, 1)]
>> set(permutations([1, 1, 2]))
{(1, 1, 2), (1, 2, 1), (2, 1, 1)}
1,1,2 三个数字的排列数应当为:A33A22=3\frac{A_3^3}{A_2^2}=3
2. chain
顾名思义,连接;
>> chain([1, 2], [3, 4])
<itertools.chain at 0x3ddf278>
>> list(chain([1, 2], [3, 4]))
[1, 2, 3, 4]
Return a chain object whose .__next__()
method returns elements from the first iterable until it is exhausted, then elements from the next iterable, until all of the iterables are exhausted;
chain 功能上更多地等价于 list 的 extend 操作,而不是 zip。
chain 基本上实现了:
for iter in xx:for i in iter:...
Python 进阶 —— itertools相关推荐
- Python 进阶之路 (九) 再立Flag, 社区最全的itertools深度解析(上)
前言 大家好,今天想和大家分享一下我的itertools学习体验及心得,itertools是一个Python的自带库,内含多种非常实用的方法,我简单学习了一下,发现可以大大提升工作效率,在sf社区内没 ...
- Python 进阶之路 (十二) 尾声即是开始
Python进阶之路总结 大家好,我的<< Python进阶之路>>到这一期就到此为止了,和 <<Python 基础起步>>不同,在掌握了一些基础知识后 ...
- [转载] Python进阶:设计模式之迭代器模式
参考链接: Python中的迭代器 在软件开发领域中,人们经常会用到这一个概念--"设计模式"(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一 ...
- python进阶17炫技巧
原创博客链接:python进阶17炫技巧 原则:可读性第一(效率固然重要,除非非常明显的效率差异,否则可读性优先) 学习炫技巧,更多为了读懂他人代码,自己开发过程中,相似代码量(可读性),建议使用通俗 ...
- python进阶教程
Python进阶中文教程 转自GitBookhttps://eastlakeside.gitbooks.io/interpy-zh/content/?q= 我仔细学习了该进阶教程,原著根据<In ...
- Python_杂学系列_3.python进阶
系列文章目录 文章目录 系列文章目录 前言 一.参考资料 二.不定参数*args 和 **kwargs 三.生成器(Generators) 四,Map,Filter 和 Reduce 五,set(集合 ...
- Python进阶之递归函数的用法及其示例
作者 | 程序员adny 责编 | 徐威龙 封图| CSDN│下载于视觉中国 出品 | AI科技大本营(ID:rgznai100) 本篇文章主要介绍了Python进阶之递归函数的用法及其示例,现在分 ...
- Python自学路线图之Python进阶
Python自学路线图的第二个阶段是Python进阶学习,自学完后需要掌握的Python技能: 1.自学Linux操作系统,熟练使用Linux操作系统: 自学网络编程,掌握网络编程相关技术, 能够实现 ...
- 如果只推荐一本 Python 进阶的书,我要 Pick 它!
作者 | 豌豆花下猫 今年二月初,我偶然看到了一条推特: <流畅的Python>一书的作者发布了一条激动人心的消息:他正在写作第二版! 如果要票选最佳的 Python 进阶类书目,这本书肯 ...
最新文章
- php 多个文件,PHP实现将多个文件中的内容合并为新文件的方法示例
- win8改win7笔记
- 内核启动流程分析(三)makefile
- [iOS] 封装倒计时(一句话调用,无内存泄漏)
- python装饰器 property_python中property和setter装饰器用法
- Unity 2017 Game Optimization 读书笔记(3)Scripting Strategies Part 3
- 3-15Pytorch与分布函数
- lighttpd + php for android
- 重写iView中Modal对话框取消和确定按钮
- 项目实训--Unity多人游戏开发(九、PUN2学习记录)
- SAP FICO 财务成本知识库
- 创建zemax非序列光学系统
- 群晖Docker青龙面板部署方法V2.11.0
- 文件管理之文件的逻辑结构
- Linux查找文件重复内容
- html中怎么录音,HTML5怎么实现录音和播放功能
- 工人级无人机,现在和未来可能都不会有垄断者出现
- 以太网的信道利用率与MAC层详解
- npm 的 execa 包的使用实例
- c语言简单小游戏(模拟魔塔)
热门文章
- Android复习准备
- Git 简介和命令行操作
- matlab运行为什么要选中代码,性能 – 为什么(在MATLAB中)这个代码更快?
- ubantu 黑屏_死机黑屏专题上线啦,早鸟只要299,看完薪水翻一番
- LeetCode 62.不同路径(动态规划)
- Linux性能分析工具汇总
- ucos-II之就绪表解读
- 如何实现SSH断开后 进程仍然在后台运行
- Spring Framework--Data Access(1)--Transaction Management(2) - 声明式事务管理
- Linux与windows的软/硬链接