代码之家  ›  专栏  ›  技术社区  ›  user3.1415927

如何连接来自(Python)iter\U工具的所有响应。product()?[副本]

  •  0
  • user3.1415927  · 技术社区  · 8 年前

    我正在尝试使用Python 2.7生成一个列表,其中列出了若干长度上所有可能的字符组合。为了举例,我使用了一个小得多的子集来证明这个概念。

    下面我生成了A-C中长度为1和2的所有字母组合。然后,我尝试在同一生成器理解中使用第二个for循环生成一个列表(错误的术语?)。我可以将单个长度的所有字符串都放入一个列表中,但我得到了错误 an integer is required 尝试时

    如何连接来自以下每个级别的所有这些响应: repeat 在产品生成器功能中?

    >>> l
    ['A', 'B', 'C']
    >>> p1 = (''.join(p) for p in product(l, repeat=1))
    >>> p2 = (''.join(p) for p in product(l, repeat=2))
    >>> [str(i) for i in p1]
    ['A', 'B', 'C']
    >>> [str(i) for i in p2]
    ['AA', 'AB', 'AC', 'BA', 'BB', 'BC', 'CA', 'CB', 'CC']
    >>> pn = (''.join(p) for p in product(l, repeat=i) for i in range(1,3))
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: an integer is required
    

    是的,我可以用嵌套for循环来实现这一点。我试着用一行程序来实现它,因为我看到了一个类似的示例,它看起来像是一个生成器理解。我以前使用过列表理解,但当我给它提供嵌套的列表理解时,我得到的是整个组合列表的长字符串列表。

    也可能是我没有正确理解迭代器函数,因为在代码示例的第5行和第7行中,我很难正确理解调试列表。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Joe Iddon    8 年前

    在生成器表达式中,for循环的方式错误,它们从左到右“嵌套”:

    >>> g = (''.join(p) for i in range(1, 3) for p in product(l, repeat=i))
    >>> list(g)
    ['A', 'B', 'C', 'AA', 'AB', 'AC', 'BA', 'BB', 'BC', 'CA', 'CB', 'CC']