在Python中有一个功能强大的迭代工具包itertools,是Python自带的标准工具包之一。

product

由于itertools是内置库,不需要任何安装,直接import itertools即可。

product 用于求多个可迭代对象的笛卡尔积(Cartesian Product),它跟嵌套的 for 循环等价.即:

笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X × Y

product(A, B)和 ``((x,y) for x in A for y in B)`一样.

import itertools
for item in itertools.product([1,2,3],[100,200]):print(item)# 输出如下
(1, 100)
(1, 200)
(2, 100)
(2, 200)
(3, 100)
(3, 200)复制代码

permutations

通俗地讲,permutations就是返回可迭代对象的所有数学或者字符的全排列方式。

全排列,即产生指定数目的元素的所有排列(顺序有关),也就是高中排列组合中的那个A

permutations它接受一个集合对象,然后产生一个元组序列。

比如print(list(('abc',3))),共有A33=6A_3^3=6A33=6种情况。

items = ['a','b','c']
from itertools import permutations
for i in permutations(items):print(i) #排列组合print(list(('abc',3)))
# 输出如下
('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')
[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]复制代码

如果需要指定长度的所有排列,可以传递一个可选的长度参数r

items = ['a','b','c']
from itertools import permutations
for i in permutations(items,2):print(i) #排列组合# 输出如下
('a', 'b')
('a', 'c')
('b', 'a')
('b', 'c')
('c', 'a')
('c', 'b')复制代码

combinations

求列表或生成器中指定数目的元素不重复的所有组合

(iter,r)(iter,r)的区别是:前者是permutations允许重复使用,后者combinations是不能重复使用

>>> print(list(('abc',3)))
[('a', 'b', 'c')]复制代码

combinations_with_replacement

combinations_with_replacementcombinations很相似,唯一的不同在于前者combinations_with_replacement集合类型中的数据是可以重复的

>>> print(list(_with_replacement('abc',3)))
[('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')]复制代码

accumulate

accumulate用于对列表中元素逐个累加

>>> import itertools
>>> x = (range(10))
>>> print(list(x))
[0, 1, 3, 6, 10, 15, 21, 28, 36, 45]复制代码

compress

compress()是筛选工具,它接受一个可迭代对象以及一个布尔选择序列作为输入,输出时会将所有布尔序列中为True的可迭代对象输出。

import itertoolsits=["a","b","c","d","e","f","g","h"]
selector=[True,False,1,0,3,False,-2,"y"]
for item in itertools.compress(its,selector):print (item)a
c
e
g
h
复制代码

count

count(初值=0, 步长=1)是 创建一个迭代器,从传入的起始参数开始的均匀间隔的数值。

我们来看一个简单的例子

from itertools import count
for i in count(10): #从10开始无限循环if i > 20: breakelse:print(i)10
11
12
13
14
15
16
17
18
19
20复制代码

chain

chain链条,主要用来把多个序列连在一起做迭代。

import itertools
chain = ([1, 2, 3], [4, 5, 6])
for c in chain:print(c)
1
2
3
4
5
6
复制代码

chain还有一个非常重要的功能就是展平列表。

>>> list(([1, 2, 3], [4, 5], [6] ,[7,8]))
[1, 2, 3, 4, 5, 6, 7, 8]复制代码

cycle

import itertools
cycle = ([1, 2, 3])
for c in cycle:print(c)复制代码

运行结果输出 1 2 3 1 2 3……一直周而复始,永不停息。

相关免费学习推荐:python视频教程

Python 中list中所有值加和_深入认识Python中的itertools模块-Python教程相关推荐

  1. 在函数fnl()中定义一个静态变量n,fnl()中对n的值加1,在主函数中,调用fnl()10次,显示n的值,c++

    定义一个静态变量n,fnl()中对n的值加1,在主函数中,调用fnl()10次,显示n的值, (有错误即使指出哈) #include<iostream> using namespace s ...

  2. python整数类型没有取值范围限制_详解Python中6种数据类型

    Python中数据类型主要有六种:数字类型,字符串类型,元组类型,列表类型,文件类型和字典类型,我们今天先介绍前四种类型. 假如在Python程序中,出现了"010",那么这个&q ...

  3. r语言中残差与回归值的残差图_独家 | 手把手教你用R语言做回归后的残差分析(附代码)-阿里云开发者社区...

    作者:Abhijit Telang 翻译:张睿毅 校对:丁楠雅 文章来源:微信公众号 数据派THU 本文介绍了做残差分析的方法及其重要性,以及利用R语言实现残差分析. 在这篇文章中,我们通过探索残差分 ...

  4. Vue 单文件组件||Vue 单文件组件的基本用法||webpack 中配置 vue 组件的加载器|| 在 webpack 项目中使用 vue

    Vue 单文件组件 传统组件的问题和解决方案 1. 问题 1. 全局定义的组件必须保证组件的名称不重复 2. 字符串模板缺乏语法高亮,在 HTML 有多行的时候,需要用到丑陋的 \ 3. 不支持 CS ...

  5. 合并的表格怎么加横线_如何在excel中文字后面加横线

    如何在excel中文字后面加横线以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如何在excel中文字后面加横线 好办啊 ...

  6. EXCEL中两列合并成一列以及根据相同列的值将表中一列的值复制到另一张表中?

    今在做EXCEL时遇两问题,现和大家分享如下: 1.如何将表中两列值合并到一列,并按照一定的分隔符进行分割,公式如下: 假如:要将F和G的值 合并到H列并按逗号","隔开:  H1 ...

  7. r语言中残差与回归值的残差图_R语言-如何处理回归中的异常值点

    R语言-如何处理回归中的异常值点 异常观测值 一个全面的回归分析要覆盖对异常值的分析,包括离群点.高杠杆值点和强影响点.这些数据点需要更深入的研究,因为它们在一定程度上与其他观测点不同,可能对结果产生 ...

  8. python读取视频里面爱豆出现的时间_计算任意视频中各人物的出镜时间(附Python实现)...

    编译:Bing编者按:本文作者Pulkit Sharma分享了一篇有趣的项目,以<猫和老鼠>为例,计算任意视频中汤姆猫和杰瑞鼠的出镜时长.这一模型也可以用于其他电影,轻松统计各演员的上镜时 ...

  9. oracle数据库字段的值加一_天天面试--数据库乐观锁和悲观锁

    悲观锁 悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁.悲观锁:假 ...

  10. excelexportentity中设置null不显示的方法_学习笔记-Java中的$符

    JavaEE中$符号出现在两个地方,一个是前端jQuery中的$(),一个是后端JSP中的EL表达式${}. 一.$()中放不同的东西代表不同的含义,(1)$(function(){}),表示文档加载 ...

最新文章

  1. 当深度学习搭上一双鞋,有人要用这检测你的压力水平!可无线操作,准确率达84%...
  2. Linux下同步工具inotify+rsync使用详解
  3. vs2008 c++ 调用java
  4. 爬虫 - HDU题目信息
  5. 【渝粤教育】国家开放大学2018年春季 8661-21T传感与检测技术 参考试题
  6. poj 1751 Highways 最小生成树Kruskal(、Prim还没写
  7. 元宇宙会成为IPv6的拐点吗?
  8. Linux中sudo的用法和sudoers配置详解
  9. WIN10杜比音效驱动安装[蓝奏云]
  10. 计算机 管理 用户,一种计算机系统及管理计算机用户权限的方法_2
  11. PT工具之Docker全家桶+HTTPS详细配置教程
  12. plupload上传文件 php,jQuery Plupload上传插件的使用方法详解
  13. 性能测试中设计性能场景
  14. 微创新:粉丝电子商务及微博的9种盈利模式
  15. OpenCV彩色图像读取
  16. 解析explain执行计划
  17. 网页实现excel下载
  18. 人工智能离不开“人工投喂”数据,现在中国约有 100 万人做这事
  19. Linux系统管理员之日志管理
  20. ECMAScript 6 简明教程(一文搞懂ES6)

热门文章

  1. Jar包冲突解决方法
  2. TFS Server 2017 自动化部署步骤
  3. 一:HTML文本编译器 kindeditor-4.1.10 的使用 SpringMVC+jsp的实现
  4. JAVA共通関数--システム時刻を取得する(1)
  5. Bailian4036 计算系数【数学+迭代】
  6. Bailian1192 最优连通子集【DFS】
  7. keras + tensorflow —— 函数式 API编程
  8. explanatory variable(independent vs dependent)、design matrix
  9. Tricks(五)—— Python 返回所有符合条件的下标
  10. Python中的三目运算符