Dim*_*ima 29 python generator combinatorics
我想要下面的代码,但"pythonic"风格或使用标准库:
def combinations(a,b):
for i in a:
for j in b:
yield(i,j)
Run Code Online (Sandbox Code Playgroud)
Sve*_*ach 39
这些都不是真正的在组合的意义上的"组合",这是相当距离的笛卡尔乘积的元素a和b.标准库中用于生成这些对的函数是itertools.product():
for i, j in itertools.product(a, b):
# whatever
Run Code Online (Sandbox Code Playgroud)
Rob*_*Rob 28
正如@Sven所说,你的代码试图获得列表a和列表的所有有序元素对b.在这种情况下itertools.product(a,b)你想要的.相反,如果您真的想要"组合",这些组合都是列表中不同元素的无序对a,那么您需要itertools.combinations(a,2).
>>> for pair in itertools.combinations([1,2,3,4],2):
... print pair
...
(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)
Run Code Online (Sandbox Code Playgroud)
该itertools库有组合数学函数.像Sven所说,itertools.product在这种情况下将是适当的功能:
list(itertools.product('ab', 'cd'))
[('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd')]
Run Code Online (Sandbox Code Playgroud)
嵌套的生成器表达式也可以使用:
product = ((i, j) for i in a for j in b)
for i, j in product:
# ...
Run Code Online (Sandbox Code Playgroud)
>>>a=[1,2,3]
>>>b=[4,5,6]
>>>zip(a,b)
[(1, 4), (2, 5), (3, 6)]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41151 次 |
| 最近记录: |