Python函数说明
问题描述:
这部分程序做什么(在Nubela's guthub上找到)?Python函数说明
def product(*args, **kwds):
"""
for py2.6< support (they lack itertools lib)
- http://docs.python.org/2/library/itertools.html#itertools.permutations
"""
pools = map(tuple, args) * kwds.get('repeat', 1)
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
for prod in result:
yield tuple(prod)
,后来在节目:
list(set((product(*[range(2) for _ in range(length)]))))
答
它实现itertools.product
的向后兼容性。看到的文档product
:
itertools.product(* iterables [,重复])
输入iterables的笛卡儿积。
等同于生成器表达式中的嵌套for循环。例如,产品(A,B)返回的结果与((x,y))相同,对于y中的x,在 B中为y)。
嵌套循环像一个里程表一样循环,最右边的元素在每次迭代中前进。此模式创建一个词典 排序,以便如果输入的可迭代序列被排序,产品 元组将按排序顺序发出。
要计算迭代本身的乘积,请使用可选的repeat关键字参数指定重复次数。例如,对于 示例,产品(A,重复= 4)意味着与产品(A,A,A,A)相同。
此功能相当于下面的代码,但实际执行中不 内存建立中间结果:
def product(*args, **kwds): # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111 pools = map(tuple, args) * kwds.get('repeat', 1) result = [[]] for pool in pools: result = [x+[y] for x in result for y in pool] for prod in result: yield tuple(prod)
注意如何在文档中的代码相匹配,你发现了什么。
我不明白他们为什么在doc把参考itertools.permutations
... 代码:
list(set((product(*[range(2) for _ in range(length)]))))
AFAIK它相当于:
list(product(*[range(2) for _ in range(length)]))
简单地计算产品length
range(2)
iterables。
是的,完全是为了计算排列。毕竟这是一个非图解求解器。 – petajamaja 2013-03-23 16:51:47