itertools产品生成所有可能的大小为3的字符串

时间:2014-12-11 00:40:35

标签: python permutation itertools cartesian-product

输入:

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。

3 个答案:

答案 0 :(得分:1)

请参阅此答案: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 ]

答案 1 :(得分:1)

简单:

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)]

答案 2 :(得分:0)

您可以使用生成器表达式生成此类生成器:

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