参考: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. T-SQL 逻辑控制语句 ifelse while casewhen

    ifelse,如果逻辑语句有多行,用begin end 包裹 use StudentManageDB go --查询成绩 declare @cAvg int select @cAvg=avg(CSha ...

  2. cordova 常用操作

    #创建插件 plugman create --name MyMath --plugin_id SimpleMath --plugin_version #进入插件目录 cd MyMath #plugin ...

  3. 通过 SSH 转发TCP连接数据

    设定 首先双方的/etc/ssh/sshd_config设定以下四项: AllowAgentForwarding yes AllowTcpForwarding yes GatewayPorts yes ...

  4. Android APP打包错误,Could not resolve com.android.tools.lint:lint-gradle:26.1.2.

    1.Please select the product flavors to build and sign 不专业的翻译一下(请选择产品的味道来制作和签名)什么鬼: 选中Flavors中的选项即可: ...

  5. Echarts动态加载柱状图和折线图混合展示的实例

    一.引入echarts文件: <script type="text/javascript" src="echarts.js"></script ...

  6. centos7 安装Jdk1.8.0

    不是很懂网上的文章...配置... 执行命令: rpm -qa|grep jdk 若无信息表明本机没装jdk. 执行安装命令: yum install -y java-1.8.0-openjdk-de ...

  7. log4js 2.X版本配置详解

    const log4js = require('log4js'); log4js.configure({ appenders: { cheese: { type: 'file', filename: ...

  8. vuejs实现瀑布流布局(三)

    前面写过vuejs实现的瀑布流布局,<vuejs实现瀑布流布局(一)>和<vuejs实现瀑布流布局(二)>也确实实现了瀑布流布局,但是这个是基于SUI-Mobile实现的无限滚 ...

  9. inno setup 软件打包

    2017-05-26 软件开发完毕以后,要进行打包发布,有几款打包用的软件很常见:innosetup,nullsoft,installshield.本人今天终于把自己独立开发的呈现软件打了包.第一个版 ...

  10. StanFord ML 笔记 第五部分

    1.朴素贝叶斯的多项式事件模型: 趁热打铁,直接看图理解模型的意思:具体求解可见下面大神给的例子,我这个是流程图. 在上篇笔记中,那个最基本的NB模型被称为多元伯努利事件模型(Multivariate ...