【发布时间】:2021-10-23 08:26:52
【问题描述】:
我的情况与这个问题的 OP 几乎完全相同:Using itertools.product and want to seed a value,我正在尝试使用此answer 中给出的代码,关于将种子值与itertools.product 一起使用。这是原始代码:
from itertools import count, imap
def make_product(*values):
def fold((n, l), v):
(n, m) = divmod(n, len(v))
return (n, l + [v[m]])
def product(n):
(n, l) = reduce(fold, values, (n, []))
if n > 0: raise StopIteration
return tuple(l)
return product
def product_from(n, *values):
return imap(make_product(*values), count(n))
print list(product_from(4, ['a','b','c'], [1,2,3]))
我从导入中删除了 imap,因为它在 Python 3 中被删除,并用 map 替换了所有 imap 实例。但是我收到双括号的语法错误
def make_product(*values):
def fold((n, l), v):
^
SyntaxError: invalid syntax
我怎样才能使这段代码在 Python 3 中工作,或者有没有更有效的方法来使用 itertools.product 获取种子值?
【问题讨论】:
-
只需将
(n, l)替换为单个参数,然后将其解压缩到函数内部的n, l中。 -
特别看second answer。
标签: python python-3.x itertools random-seed