【问题标题】:itertools product to generate all possible strings of size 3itertools 产品生成所有可能的大小为 3 的字符串
【发布时间】:2015-02-09 09:13:42
【问题描述】:

输入:

pos_1= 'AVNMHDRW' 
pos_2= 'KNTHDYBW'
pos_3= 'KVNGSDRB'

尝试使用 pos_1 中的一项、pos_2 中的一项和 pos_3 中的一项来查找所有可能的三元组

我正在尝试弄清楚如何使用 itertools.product(*) 但我有点困惑

最终,我想创建一个包含所有不同可能性的列表(或生成器对象),方法是从 pos_1 中获取一个,然后从 pos_2 中获取一个,然后从 pos_3 中获取一个

示例输出:

'AKK','ANV','WWB'

pos_1 代表位置 1,以此类推 pos_2 和 pos_3。

【问题讨论】:

  • 不确定为什么需要产品,但您可以像g = ( [v1,v2,v3] for v1 in pos_1 for v2 in pos_2 for v3 in pos_3)一样简单地制作生成器

标签: python permutation itertools cartesian-product


【解决方案1】:

您可以使用生成器表达式制作这样的生成器:

g = (v1+v2+v3  for v1 in pos_1 for v2 in pos_2 for v3 in pos_3)

【讨论】:

    【解决方案2】:

    简单:

    itertools.product(pos_1, pos_2, pos_3)
    

    这可以迭代;如果你想要一个列表,只需将它传递给list

    究竟是什么问题?

    编辑:这会生成来自每个来源的项目的元组。如果您想将它们重新加入字符串,您可以在迭代时手动执行:

    for a, b, c in itertools.product(pos_1, pos_2, pos_3):
        do_something_with(a + b + c)
    

    或者要创建列表,您可以使用列表推导:

    [a + b + c for a, b, c in itertools.product(pos_1, pos_2, pos_3)]
    

    【讨论】:

    • 或者为了好玩,map(''.join, itertools.product(pos_1, pos_2, pos_3))
    【解决方案3】:

    看到这个答案:In python is ther a concise way to a list comprehension with multiple iterators

    在你的情况下:

    triples = [ a+b+c for a in pos_1 for b in pos_2 for c in pos_3 ]
    

    【讨论】:

      猜你喜欢
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多