itertools,顾名思义,用作迭代的工具,它不会直接返回一个序列,而是返回一个可迭代的对象,用于 for 循环迭代取出,或者 list comprehension。

1. permutations vs combinations

Akn=n!(n−k)!Ckn=n!(n−k)!k!

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相关推荐

  1. Python 进阶之路 (九) 再立Flag, 社区最全的itertools深度解析(上)

    前言 大家好,今天想和大家分享一下我的itertools学习体验及心得,itertools是一个Python的自带库,内含多种非常实用的方法,我简单学习了一下,发现可以大大提升工作效率,在sf社区内没 ...

  2. Python 进阶之路 (十二) 尾声即是开始

    Python进阶之路总结 大家好,我的<< Python进阶之路>>到这一期就到此为止了,和 <<Python 基础起步>>不同,在掌握了一些基础知识后 ...

  3. [转载] Python进阶:设计模式之迭代器模式

    参考链接: Python中的迭代器 在软件开发领域中,人们经常会用到这一个概念--"设计模式"(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一 ...

  4. python进阶17炫技巧

    原创博客链接:python进阶17炫技巧 原则:可读性第一(效率固然重要,除非非常明显的效率差异,否则可读性优先) 学习炫技巧,更多为了读懂他人代码,自己开发过程中,相似代码量(可读性),建议使用通俗 ...

  5. python进阶教程

    Python进阶中文教程 转自GitBookhttps://eastlakeside.gitbooks.io/interpy-zh/content/?q= 我仔细学习了该进阶教程,原著根据<In ...

  6. Python_杂学系列_3.python进阶

    系列文章目录 文章目录 系列文章目录 前言 一.参考资料 二.不定参数*args 和 **kwargs 三.生成器(Generators) 四,Map,Filter 和 Reduce 五,set(集合 ...

  7. Python进阶之递归函数的用法及其示例

    作者 | 程序员adny 责编 | 徐威龙 封图| CSDN│下载于视觉中国 出品 |  AI科技大本营(ID:rgznai100) 本篇文章主要介绍了Python进阶之递归函数的用法及其示例,现在分 ...

  8. Python自学路线图之Python进阶

    Python自学路线图的第二个阶段是Python进阶学习,自学完后需要掌握的Python技能: 1.自学Linux操作系统,熟练使用Linux操作系统: 自学网络编程,掌握网络编程相关技术, 能够实现 ...

  9. 如果只推荐一本 Python 进阶的书,我要 Pick 它!

    作者 | 豌豆花下猫 今年二月初,我偶然看到了一条推特: <流畅的Python>一书的作者发布了一条激动人心的消息:他正在写作第二版! 如果要票选最佳的 Python 进阶类书目,这本书肯 ...

最新文章

  1. php 多个文件,PHP实现将多个文件中的内容合并为新文件的方法示例
  2. win8改win7笔记
  3. 内核启动流程分析(三)makefile
  4. [iOS] 封装倒计时(一句话调用,无内存泄漏)
  5. python装饰器 property_python中property和setter装饰器用法
  6. Unity 2017 Game Optimization 读书笔记(3)Scripting Strategies Part 3
  7. 3-15Pytorch与分布函数
  8. lighttpd + php for android
  9. 重写iView中Modal对话框取消和确定按钮
  10. 项目实训--Unity多人游戏开发(九、PUN2学习记录)
  11. SAP FICO 财务成本知识库
  12. 创建zemax非序列光学系统
  13. 群晖Docker青龙面板部署方法V2.11.0
  14. 文件管理之文件的逻辑结构
  15. Linux查找文件重复内容
  16. html中怎么录音,HTML5怎么实现录音和播放功能
  17. 工人级无人机,现在和未来可能都不会有垄断者出现
  18. 以太网的信道利用率与MAC层详解
  19. npm 的 execa 包的使用实例
  20. c语言简单小游戏(模拟魔塔)

热门文章

  1. Android复习准备
  2. Git 简介和命令行操作
  3. matlab运行为什么要选中代码,性能 – 为什么(在MATLAB中)这个代码更快?
  4. ubantu 黑屏_死机黑屏专题上线啦,早鸟只要299,看完薪水翻一番
  5. LeetCode 62.不同路径(动态规划)
  6. Linux性能分析工具汇总
  7. ucos-II之就绪表解读
  8. 如何实现SSH断开后 进程仍然在后台运行
  9. Spring Framework--Data Access(1)--Transaction Management(2) - 声明式事务管理
  10. Linux与windows的软/硬链接