【385】itertools 的 product 和 chain 和 accumulate
参考:itertools模块
product
相当于返回两个集合中数据的所有组合可能
Examples from Eric Martin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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' )] |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 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:二进制数三位数的所有可能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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
1 2 3 4 5 | from itertools import chain [e for e in chain([ 2 , 3 ], { 3 , 4 }, ( 3 , 4 ))] output: [ 2 , 3 , 3 , 4 , 3 , 4 ] |
accumulate 可以实现将可迭代对象进行累加的效果,形成一个新的可迭代对象
1 2 3 4 | >>> a = accumulate([ 1 , 2 , 3 , 4 ]) >>> [i for i in a] [ 1 , 3 , 6 , 10 ] |
分类:
Python Study
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)