给定迭代[A, B, C]和函数f(x)我想得到以下内容:
[ A, B, C]
[ A, B, f(C)]
[ A, f(B), C]
[ A, f(B), f(C)]
[f(A), B, C]
[f(A), B, f(C)]
[f(A), f(B), C]
[f(A), f(B), f(C)]
Run Code Online (Sandbox Code Playgroud)
不幸的是我在itertools模块中找不到任何合适的东西.
>>> from itertools import product
>>> L = ["A", "B", "C"]
>>> def f(c): return c.lower()
...
>>> fL = [f(x) for x in L]
>>> for i in product(*zip(L, fL)):
... print i
...
('A', 'B', 'C')
('A', 'B', 'c')
('A', 'b', 'C')
('A', 'b', 'c')
('a', 'B', 'C')
('a', 'B', 'c')
('a', 'b', 'C')
('a', 'b', 'c')
Run Code Online (Sandbox Code Playgroud)
说明:
要求生成f每个项目LfL
>>> fL
['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)
用于zip将两个列表压缩成对
>>> zip(L, fL)
[('A', 'a'), ('B', 'b'), ('C', 'c')]
Run Code Online (Sandbox Code Playgroud)
使用那些元组的笛卡尔积 itertools.product
product(*zip(L, fL))
Run Code Online (Sandbox Code Playgroud)
相当于
product(*[('A', 'a'), ('B', 'b'), ('C', 'c')])
Run Code Online (Sandbox Code Playgroud)
这相当于
product(('A', 'a'), ('B', 'b'), ('C', 'c'))
Run Code Online (Sandbox Code Playgroud)
循环使用该产品,可以提供我们所需的结果.
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |