itertools库包含:

  • 无限迭代器
  • 有限序列处理
  • 排列组合

range对象


# 添加函数说明
def print_info(obj: "iter object") -> "print_info":print(obj)print(type(obj))print(list(obj))# help(print_info)
# print_info(obj:'iter object') -> 'print_info'# range对象
r = range(10)
print_info(r)
"""
range(0, 10)
<class 'range'>
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
"""

无限迭代器


import itertools# 无限计数器,可以指定起始位置和步长
x = itertools.count(start=20, step=-1)
print(list(itertools.islice(x, 0, 10, 1)))
# [20, 19, 18, 17, 16, 15, 14, 13, 12, 11]# 无限循环指定的列表和迭代器
x = itertools.cycle("ABC")
print(list(itertools.islice(x, 0, 10, 1)))
# ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C', 'A']# 简单的生成一个拥有指定数目元素的迭代器
x = itertools.repeat(0, 5)
print(list(x))  # [0, 0, 0, 0, 0]

有限序列处理


# 累加
x = itertools.accumulate(range(10))
print(x)# <itertools.accumulate object>
print(list(x))  # [0, 1, 3, 6, 10, 15, 21, 28, 36, 45]# 连接多个列表或者迭代器
x = itertools.chain(range(3), range(4), [6, 7, 8])
print(x) # <itertools.chain object>
print(list(x))# [0, 1, 2, 0, 1, 2, 3, 6, 7, 8]# 按照真值表筛选元素
x = itertools.compress(range(5), (True, False, False, True, True))
print(list(x))  # [0, 3, 4]# 保留对应真值为False的元素
x = itertools.filterfalse(lambda e : e < 5, (1, 5, 3, 6, 9, 4))
print(list(x))  # [5, 6, 9]# 按照分组函数的值对元素进行分组
x = itertools.groupby(range(10), lambda e: e < 5 or e > 8)
for condition, numbers in x:print(condition, list(numbers))
"""
True [0, 1, 2, 3, 4]
False [5, 6, 7, 8]
True [9]
"""# 对迭代器进行切片
x = itertools.islice(range(10), 0, 9, 2)
print(list(x))  # [0, 2, 4, 6, 8]# 按照真值函数丢弃掉列表和迭代器前面的元素
x = itertools.dropwhile(lambda e: e < 5, range(10))
print(list(x))  # [5, 6, 7, 8, 9]# 与dropwhile相反,保留元素直至真值函数值为假。
x = itertools.takewhile(lambda e: e < 5, range(10))
print(list(x))
# [0, 1, 2, 3, 4]# 生成指定数目的迭代器
x = itertools.tee(range(10), 2)
for letters in x:print(list(letters))"""
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
"""# 类似于zip,不过已较长的列表和迭代器的长度为准
x = itertools.zip_longest(range(3), range(5))
y = zip(range(3), range(5))print(list(x))
print(list(y))
"""
[(0, 0), (1, 1), (2, 2), (None, 3), (None, 4)]
[(0, 0), (1, 1), (2, 2)]
"""# 类似map
x = itertools.starmap(str.islower, "asdfgDFASDF")
y = map(str.islower, "asdfgDFASDF")print(list(x))
print(list(y))
"""
[True, True, True, True, True, False, False, False, False, False, False]
[True, True, True, True, True, False, False, False, False, False, False]
"""

排列组合


# 产生多个列表和迭代器的(笛卡尔乘积)
x = itertools.product("ABC", range(3))
print(list(x))
"""
[('A', 0), ('A', 1), ('A', 2), ('B', 0),
('B', 1), ('B', 2), ('C', 0), ('C', 1), ('C', 2)]
"""# 求列表或生成器中指定数目的元素不重复的所有组合
x = itertools.combinations(range(4), 3)
print(type(x))  # <class 'itertools.combinations'>
print(list(x))
# [(0, 1, 2), (0, 1, 3), (0, 2, 3), (1, 2, 3)]# 允许重复元素的组合
x = itertools.combinations_with_replacement("ABC", 2)
print(list(x))
# [('A', 'A'), ('A', 'B'), ('A', 'C'),
('B', 'B'), ('B', 'C'), ('C', 'C')]# 产生指定数目的元素的所有排列(顺序有关)
x = itertools.permutations(range(4), 3)
print(list(x))
"""
[(0, 1, 2), (0, 1, 3), (0, 2, 1), (0, 2, 3),
(0, 3, 1), (0, 3, 2), (1, 0, 2), (1, 0, 3),
(1, 2, 0), (1, 2, 3), (1, 3, 0), (1, 3, 2),
(2, 0, 1), (2, 0, 3), (2, 1, 0), (2, 1, 3),
(2, 3, 0), (2, 3, 1), (3, 0, 1), (3, 0, 2),
(3, 1, 0), (3, 1, 2), (3, 2, 0), (3, 2, 1)]
"""

help(itertools)

"""Infinite iterators: 无限迭代器count(start=0, step=1) --> start, start+step, start+2*step, ...cycle(p) --> p0, p1, ... plast, p0, p1, ...repeat(elem [,n]) --> elem, elem, elem, ... endlessly or up to n timesIterators terminating on the shortest input sequence:accumulate(p[, func]) --> p0, p0+p1, p0+p1+p2chain(p, q, ...) --> p0, p1, ... plast, q0, q1, ... chain.from_iterable([p, q, ...]) --> p0, p1, ... plast, q0, q1, ... compress(data, selectors) --> (d[0] if s[0]), (d[1] if s[1]), ...dropwhile(pred, seq) --> seq[n], seq[n+1], starting when pred failsgroupby(iterable[, keyfunc]) --> sub-iterators grouped by value of keyfunc(v)filterfalse(pred, seq) --> elements of seq where pred(elem) is Falseislice(seq, [start,] stop [, step]) --> elements fromseq[start:stop:step]starmap(fun, seq) --> fun(*seq[0]), fun(*seq[1]), ...tee(it, n=2) --> (it1, it2 , ... itn) splits one iterator into ntakewhile(pred, seq) --> seq[0], seq[1], until pred failszip_longest(p, q, ...) --> (p[0], q[0]), (p[1], q[1]), ... Combinatoric generators:product(p, q, ... [repeat=1]) --> cartesian productpermutations(p[, r])  排列combinations(p, r)  组合combinations_with_replacement(p, r)"""

参考:
《相见恨晚的 itertools 库》
http://mp.weixin.qq.com/s/Rb5aYWA7NYOi1eckGtakuQ

Python编程:itertools库排列组合相关推荐

  1. NLP之情感分析:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码

    NLP之情感分析:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码 目录 全部代码 相关文章 NLP之情感分析:基于python编程(jieba库)实现中文文本情 ...

  2. NLP之TEA:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码

    NLP之TEA:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码 目录 全部代码 相关文章 NLP之TEA:基于python编程(jieba库)实现中文文本情感分 ...

  3. ​​​​​​​NLP之TEA:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)

    NLP之TEA:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分) 目录 输出结果 设计思路 相关资料 1.关于代码 2.关于数据集 关于留言 1.留言内容的注意事项 2.如 ...

  4. 【Python基础】Python中的高效迭代库itertools,排列组合随便求

    本文目录 一.模块概述 二.组合生成器 2.1 product 2.2 permutations 2.3 combinations 2.4 combinations_with_replacement ...

  5. python实现不重复排列组合_python之itertools的排列组合相关

    最近由于需要做一些排列组合的需要,本来没想到python自带库中会有这功能,还花了点时间写了下,后来翻看python标准库的时候,发现,这货居然直接提供了,而且还提供了几种形式,之间上代码: impo ...

  6. python多个列表排列组合_多个列表的排列组合(笛卡儿积) | 迭代实现

    在西电开源社区逛论坛时候,发现下面的排列组合问题有一个高效的迭代方式实现. 如何从 ['ABC', '12'] 得到 A1 A2 B1 B2 C1 C2 然后推广到 ['abcd', '98h40ui ...

  7. python编程题-python编程题库

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 上期题目连接:1000道python题库系列分享十一(9道)上期题目答案:? 本期 ...

  8. 2018python做图形界面哪个库简单_2018年常见的python编程开发库都有哪些类型

    python编程开发可以说是目前比较热门的一项编程开发语言了,而今天我们就一起来了解一下,关于python编程都有哪些常见的python库可以使用. 1.TensorFlow "Tensor ...

  9. python程序设计题库-python编程题库

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 上期题目连接:1000道python题库系列分享十一(9道)上期题目答案 ...

最新文章

  1. 恒位油杯故障原因_厂家详解干式真空泵故障分析与保养办法
  2. 【SQL Join】两个字段关联到同一个表,如何使用left join
  3. 2016/09/16面试资料汇总
  4. ibatis(2)ibatis是什么
  5. Django之web框架的本质
  6. date js 半年_js Date 日期使用上的一个坑
  7. ifconfig没有ip地址_没有宽带也可以实现全家上网
  8. 效果过度transition:all
  9. Adaboost算法结合Haar-like特征
  10. eclipse 3.x中热部署WEB程序TOMCAT配置
  11. Python数据结构判断括号是否匹配
  12. 虚拟机安装mac os x详细图文教程
  13. 北大青鸟汉字注释机内码_众海常用汉字机内码表
  14. 非常火的斗图表情包小程序源码
  15. js12---闭包,原型,继承
  16. python塔防之------“红精灵来袭”
  17. 解决uniapp调试过程中的请求跨域和环境配置
  18. 数据处理之one-hot
  19. 企业服务器托管比租用有哪些优势
  20. 一张图,三分钟看懂什么是动态IP,内网和外网

热门文章

  1. Modern GMT Series:Slice in 3D View (三维切片图)
  2. maven配置私服地址(公司私服)记录
  3. 英语点读笔市场太内卷 飞扫翻译笔靠实力“超车”
  4. 【实训第一天】-开班仪式
  5. 不知道起什么标题 03
  6. STG2Seq:多步乘车需求预测的时空图序列模型
  7. 一个大型虚拟项目包含位于不同地点的许多干系人_PLAN8T ART 丨在虚拟维度的拼贴现实中,漫游,想象。...
  8. Linux管理日记(一)
  9. 【Windows + Linux】专业级:安装操作系统 + 多系统 + GhostCast Server PXE 网刻基础坑精通详解
  10. python爬取pubmed的文献_使用python來調用pubmed API快速整理文獻