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

问题描述 投票:0回答:3

输入:

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。

python permutation itertools cartesian-product
3个回答
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)]

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 ]

0
投票

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

g = (v1+v2+v3  for v1 in pos_1 for v2 in pos_2 for v3 in pos_3)
© www.soinside.com 2019 - 2024. All rights reserved.