【问题标题】:Using itertools.product with seed value in Python3 [duplicate]在 Python3 中使用带有种子值的 itertools.product [重复]
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-10-07
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多