参考:itertools模块

product

相当于返回两个集合中数据的所有组合可能

Examples from Eric Martin

from itertools import product

print(list(product([0, 1], 'abc')))
print()
print(list(product(['A', 'B'], ('a', 'b'), range(2))))
print()
print(list(product([0, 1], repeat = 2)))
print()
print(list(product('ab', repeat = 4))) output:
[(0, 'a'), (0, 'b'), (0, 'c'), (1, 'a'), (1, 'b'), (1, 'c')] [('A', 'a', 0), ('A', 'a', 1), ('A', 'b', 0), ('A', 'b', 1), ('B', 'a
', 0), ('B', 'a', 1), ('B', 'b', 0), ('B', 'b', 1)] [(0, 0), (0, 1), (1, 0), (1, 1)] [('a', 'a', 'a', 'a'), ('a', 'a', 'a', 'b'), ('a', 'a', 'b', 'a'), ('
a', 'a', 'b', 'b'), ('a', 'b', 'a', 'a'), ('a', 'b', 'a', 'b'), ('a',
'b', 'b', 'a'), ('a', 'b', 'b', 'b'), ('b', 'a', 'a', 'a'), ('b', 'a
', 'a', 'b'), ('b', 'a', 'b', 'a'), ('b', 'a', 'b', 'b'), ('b', 'b',
'a', 'a'), ('b', 'b', 'a', 'b'), ('b', 'b', 'b', 'a'), ('b', 'b', 'b'
, 'b')]
from itertools import product
a = (1, 2, 3)
b = ('A', 'B', 'C')
c = ('d', 'e', 'f')
pros = product(a, b, c)
count = 1
for elem in pros:
print(f'{count:02}', "---", elem)
count+=1 output:
01 --- (1, 'A', 'd')
02 --- (1, 'A', 'e')
03 --- (1, 'A', 'f')
04 --- (1, 'B', 'd')
05 --- (1, 'B', 'e')
06 --- (1, 'B', 'f')
07 --- (1, 'C', 'd')
08 --- (1, 'C', 'e')
09 --- (1, 'C', 'f')
10 --- (2, 'A', 'd')
11 --- (2, 'A', 'e')
12 --- (2, 'A', 'f')
13 --- (2, 'B', 'd')
14 --- (2, 'B', 'e')
15 --- (2, 'B', 'f')
16 --- (2, 'C', 'd')
17 --- (2, 'C', 'e')
18 --- (2, 'C', 'f')
19 --- (3, 'A', 'd')
20 --- (3, 'A', 'e')
21 --- (3, 'A', 'f')
22 --- (3, 'B', 'd')
23 --- (3, 'B', 'e')
24 --- (3, 'B', 'f')
25 --- (3, 'C', 'd')
26 --- (3, 'C', 'e')
27 --- (3, 'C', 'f')

例子2:二进制数三位数的所有可能

a = (0, 1)
b = (0, 1)
c = (0, 1)
pros = product(a, b, c)
count = 1
for elem in pros:
print(f'{count:02}', "---", elem)
count+=1 output:
01 --- (0, 0, 0)
02 --- (0, 0, 1)
03 --- (0, 1, 0)
04 --- (0, 1, 1)
05 --- (1, 0, 0)
06 --- (1, 0, 1)
07 --- (1, 1, 0)
08 --- (1, 1, 1)

chain 就是合并成一个 iter

from itertools import chain
[e for e in chain([2, 3], {3, 4}, (3,4))] output:
[2, 3, 3, 4, 3, 4]

accumulate 可以实现将可迭代对象进行累加的效果,形成一个新的可迭代对象

>>> a = accumulate([1, 2, 3, 4])

>>> [i for i in a]
[1, 3, 6, 10]

【385】itertools 的 product 和 chain 和 accumulate的更多相关文章

  1. 【Python】itertools之product函数

    [转载]源博客 product 用于求多个可迭代对象的笛卡尔积(Cartesian Product),它跟嵌套的 for 循环等价.即: product(A, B) 和 ((x,y) for x in ...

  2. Python标准模块--itertools

    1 模块简介 Python提供了itertools模块,可以创建属于自己的迭代器.itertools提供的工具快速并且节约内存.开发者可以使用这些工具创建属于自己特定的迭代器,这些特定的迭代器可以用于 ...

  3. Python标准库笔记(10) — itertools模块

    itertools 用于更高效地创建迭代器的函数工具. itertools 提供的功能受Clojure,Haskell,APL和SML等函数式编程语言的类似功能的启发.它们的目的是快速有效地使用内存, ...

  4. python基础===Python 迭代器模块 itertools 简介

    本文转自:http://python.jobbole.com/85321/ Python提供了一个非常棒的模块用于创建自定义的迭代器,这个模块就是 itertools.itertools 提供的工具相 ...

  5. python基础=== itertools介绍(转载)

    原文链接:http://python.jobbole.com/85321/ Python提供了一个非常棒的模块用于创建自定义的迭代器,这个模块就是 itertools.itertools 提供的工具相 ...

  6. Python3标准库:itertools迭代器函数

    1. itertools迭代器函数 itertools包括一组用于处理序列数据集的函数.这个模块提供的函数是受函数式编程语言(如Clojure.Haskell.APL和SML)中类似特性的启发.其目的 ...

  7. 高效的 itertools 模块(转)

    原文地址:http://python.jobbole.com/87380/ 我们知道,迭代器的特点是:惰性求值(Lazy evaluation),即只有当迭代至某个值时,它才会被计算,这个特点使得迭代 ...

  8. pythonic-迭代器函数-itertools

    认识 Python 的itertools模块提供了很多节省内存的高效迭代器, 尤其解决了一些关于数据量太大而导致内存溢出(outofmemory)的场景. 我们平时用的循环绝大多数是这样的. # wh ...

  9. itertools

    0. Python中引入itertools 1. 笛卡尔积: product(iter1, iter2,...,iterN,[repeat=i]) from itertools import prod ...

随机推荐

  1. 【Laravel】 常用的artisan命令【原创】

    全局篇   查看artisan命令 php artisan php artisan list   查看某个帮助命令 php artisan help make:model   查看laravel版本 ...

  2. tomcat Error:NB:JAVA_HOME should point to a JDK not a JRE 解决方法

    环境:win7 tomcata7.0解压版本 执行:service.bat install 报错:JAVA_HOME should point to a JDK not a JRE 网上找了几种解决方 ...

  3. 使用gulp压缩js详细步骤笔记

    先要安装nodejs,初始化项目配置文件package.json,根据情况输入配置参数 npm init test command: git repository: keywords: author: ...

  4. Ambari集群的搭建(离线安装)

    我们先克隆几台机器 我们打开克隆出来的机器 我们先把主机名修改一下 我们把主机名改成am2 下一步我们来配置网卡 把原来的eth0的注释掉,把现在的eth1改成eth0,同时把mac地址记下来 保存退 ...

  5. 用VirtualBox快速安装虚拟机virtual Machine(Win7+IE10)

    前端测试,经常需要各种环境, 用“Virtual Box + OVA文件”安装虚拟机, 是简单高效的一种方法,可以安装各种window和IE的版本.下面以IE10 + Win7为例说明. 1) 下载和 ...

  6. ThinkPHP5调用PHPExcel类实现导入导出

    注意:extend是放置第三方类的地方,不要乱配置命名空间那些,引起不必要的类错误 代码如下 <?php namespace app\index\controller; use think\Co ...

  7. 「2017 山东一轮集训 Day5」字符串 (后缀自动机, 拓扑排序)

    /** 首先通过SAM求出每个串本质不同的子串 然后发现转移不好处理整体的本质不同 形如串A可能状态有a,b,ab,空,串B可能状态有b,空两种, 那么我们需要处理ab + 空 和 a + b的情况 ...

  8. error while obtaining ui hierarchy xml file...用 uiautomatorviewer 获取安卓手机软件页面时报错

    Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't ...

  9. getent passwd 不能访问到 ldap 的用户

    getent passwd  不能访问到 ldap 的用户,搞了一整个下午! 依然没搞定, 一开始是不知道nslcd 需要启动,另外getent passwd 域, 无有用结果, 换个方式搜索 get ...

  10. 如何解决Android帧动画出现的内存溢出

    这几天在做动画的时候,遇到了一个OOM的问题,特此记录下来. 普通实现 实现一个帧动画,最先想到的就是用animation-list将全部图片按顺序放入,并设置时间间隔和播放模式.然后将该drawab ...