使用 itertools.product 和 Python3 中的种子值
Using itertools.product with seed value in Python3
我的处境几乎与这个问题的 OP 完全相同:Using itertools.product and want to seed a value and I am trying to use the code given in this 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 中删除,并将 imap
的所有实例替换为 map
。但是我收到带有双括号
的语法错误
def make_product(*values):
def fold((n, l), v):
^
SyntaxError: invalid syntax
如何使此代码在 Python 3 中工作,或者是否有更有效的方法来使用 itertools.product
获取种子值?
您可以将其替换为单个参数,然后使用元组解包创建 n
和 l
:
def fold(n_l, v):
(n, l) = n_l
(n, m) = divmod(n, len(v))
return (n, l + [v[m]])
我的处境几乎与这个问题的 OP 完全相同:Using itertools.product and want to seed a value and I am trying to use the code given in this 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 中删除,并将 imap
的所有实例替换为 map
。但是我收到带有双括号
def make_product(*values):
def fold((n, l), v):
^
SyntaxError: invalid syntax
如何使此代码在 Python 3 中工作,或者是否有更有效的方法来使用 itertools.product
获取种子值?
您可以将其替换为单个参数,然后使用元组解包创建 n
和 l
:
def fold(n_l, v):
(n, l) = n_l
(n, m) = divmod(n, len(v))
return (n, l + [v[m]])