从两个字符串生成所有可能的字符串,并在 python 中保持位置

use*_*587 1 python list python-itertools python-2.7

给出两个词:

AT
TC
Run Code Online (Sandbox Code Playgroud)

我想生成所有可能的组合(不确定组合是否适用于此处),这些组合可以通过逐一替换这两个字符串的字符来生成,结果是:

AT
TT
AC
TC
Run Code Online (Sandbox Code Playgroud)

编辑:

我试过了:

from itertools import product
ref = "ACGT"
snp = "TGCA"
prod = product(ref,snp)
for p in prod:
    print p
Run Code Online (Sandbox Code Playgroud)

但结果是:

('A', 'T')
('A', 'G')
('A', 'C')
('A', 'A')
('C', 'T')
('C', 'G')
('C', 'C')
('C', 'A')
('G', 'T')
('G', 'G')
('G', 'C')
('G', 'A')
('T', 'T')
('T', 'G')
('T', 'C')
('T', 'A')
Run Code Online (Sandbox Code Playgroud)

不是我要找的。我期待类似的结果(每个结果应该与输入的长度相同):

ACGT
TCGT
AGGT
ACGA
....
Run Code Online (Sandbox Code Playgroud)

Moi*_*dri 5

您正在寻找itertools.product您可以使用的内容,例如:

>>> from itertools import product
>>> my_list = [ 'AT' , 'TC']

>>> list(product(*my_list))
[('A', 'T'), ('A', 'C'), ('T', 'T'), ('T', 'C')]
Run Code Online (Sandbox Code Playgroud)

要将这些值作为字符串获取,您可以使用列表理解:

>>> [''.join(s) for s in product(*my_list)]
['AT', 'AC', 'TT', 'TC']
Run Code Online (Sandbox Code Playgroud)

编辑(基于问题中的编辑)

对于您共享的新示例,您应该使用zip上面的列表理解表达式并itertools.product作为:

>>> ref = "ACGT"
>>> snp = "TGCA"

>>> [''.join(s) for s in product(*zip(ref,snp))]
['ACGT', 'ACGA', 'ACCT', 'ACCA', 'AGGT', 'AGGA', 'AGCT', 'AGCA', 'TCGT', 'TCGA', 'TCCT', 'TCCA', 'TGGT', 'TGGA', 'TGCT', 'TGCA']
Run Code Online (Sandbox Code Playgroud)