使用 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 获取种子值?

您可以将其替换为单个参数,然后使用元组解包创建 nl:

def fold(n_l, v):
    (n, l) = n_l
    (n, m) = divmod(n, len(v))
    return (n, l + [v[m]])