Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python中保持位置的两个字符串生成所有可能的字符串_Python_Python 2.7_List_Itertools - Fatal编程技术网

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

从python中保持位置的两个字符串生成所有可能的字符串,python,python-2.7,list,itertools,Python,Python 2.7,List,Itertools,给两个词: AT TC 我想通过将这两个字符串中的一个替换为一个字符来生成所有可能的组合(不确定组合是否适用于此处),结果: AT TT AC TC 编辑: 我试过: from itertools import product ref = "ACGT" snp = "TGCA" prod = product(ref,snp) for p in prod: print p 但结果是: ('A', 'T') ('A', 'G') ('A', 'C') ('A', 'A') ('C',

给两个词:

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

AT
TT
AC
TC
编辑:

我试过:

from itertools import product
ref = "ACGT"
snp = "TGCA"
prod = product(ref,snp)
for p in prod:
    print p
但结果是:

('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')
不是我要找的。我期望类似这样的结果(每个结果应该与输入长度相同):


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

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

>>> list(product(*my_list))
[('A', 'T'), ('A', 'C'), ('T', 'T'), ('T', 'C')]
要将这些值作为字符串获取,您可以使用以下列表:

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

对于您共享的新示例,您应该将
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']

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

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

>>> list(product(*my_list))
[('A', 'T'), ('A', 'C'), ('T', 'T'), ('T', 'C')]
要将这些值作为字符串获取,您可以使用以下列表:

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

对于您共享的新示例,您应该将
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']

这将产生所需的输出,其中两个字符串中的字符固定在各自的位置:

from itertools import product

ref = "ACGT"
snp = "TGCA"
for p in product(*zip(ref, snp)):
    ''.join(p)

'ACGT'
'ACGA'
'ACCT'
'ACCA'
'AGGT'
'AGGA'
'AGCT'
'AGCA'
'TCGT'
'TCGA'
'TCCT'
'TCCA'
'TGGT'
'TGGA'
'TGCT'
'TGCA'

输入两个序列并迭代压缩对的笛卡尔积。

这将生成所需的输出,其中两个字符串中的字符固定在其位置:

from itertools import product

ref = "ACGT"
snp = "TGCA"
for p in product(*zip(ref, snp)):
    ''.join(p)

'ACGT'
'ACGA'
'ACCT'
'ACCA'
'AGGT'
'AGGA'
'AGCT'
'AGCA'
'TCGT'
'TCGA'
'TCCT'
'TCCA'
'TGGT'
'TGGA'
'TGCT'
'TGCA'

您可以选择这两个序列并迭代压缩对的笛卡尔积。

以下内容应该可以解决您的用例

list(''.join(s) for s in list(itertools.product(*zip(a, b))))

下面应该解决您的用例

list(''.join(s) for s in list(itertools.product(*zip(a, b))))

考虑这样一种情况,即有两个字符串,每个字符串的长度为4。想象一个同样长度的小面具(四个)。每个可能的位掩码都应该对应于一个字符串中的有效选择

因此:

ABCD
zyxw
下面是结果:

0000 -> ABCD
0001 -> ABCw
0010 -> ABxD
0011 -> ABxw
0100 -> AyCD
0101 -> AyCw
0110 -> AyxD
0111 -> Ayxw

   .... and so on

泛化,考虑n-字符串生成基n中的所有数,直到这些字符串长度的顺序。(不确定您希望如何处理非统一的字符串长度;但原理是相同的,即使您添加了某种从结果中过滤出来的“NULL”填充;类似于我们通常从正常十进制数表示中过滤前导零的方式)

我现在没有时间为此编写代码。但方法是将这些字符串中的每一个映射到一个符号(数字或字符),并根据数字字符串及其长度在整数范围内迭代。例如,两个八个字符的字符串各为28(256),而三个七个字符的字符串各为37(2187),依此类推


将每个整数转换为其在基中的表示形式,并查找映射以从存储在该键上的值(字符串)中提取该位置的字符。这与将整数转换为任意基、取模n并移位到零的情况相同。

考虑两个字符串的情况,每个字符串的长度为4。想象一个同样长度的小面具(四个)。每个可能的位掩码都应该对应于一个字符串中的有效选择

因此:

ABCD
zyxw
下面是结果:

0000 -> ABCD
0001 -> ABCw
0010 -> ABxD
0011 -> ABxw
0100 -> AyCD
0101 -> AyCw
0110 -> AyxD
0111 -> Ayxw

   .... and so on

泛化,考虑n-字符串生成基n中的所有数,直到这些字符串长度的顺序。(不确定您希望如何处理非统一的字符串长度;但原理是相同的,即使您添加了某种从结果中过滤出来的“NULL”填充;类似于我们通常从正常十进制数表示中过滤前导零的方式)

我现在没有时间为此编写代码。但方法是将这些字符串中的每一个映射到一个符号(数字或字符),并根据数字字符串及其长度在整数范围内迭代。例如,两个八个字符的字符串各为28(256),而三个七个字符的字符串各为37(2187),依此类推


将每个整数转换为其在基中的表示形式,并查找映射以从存储在该键上的值(字符串)中提取该位置的字符。这与将整数转换为任意基、取模n并移位到零的方法相同。

听起来像是itertools的.product的工作,但这不是我要找的。事实上,我想要的是我需要做的事情的名称,这样我可以检查数学背景。笛卡尔乘积是的,你需要先转置。我想人们可能误解了这一点,因为您最初的输入示例等于它的transpose.lol。。。等一下,你给出两个字母单词的例子,这些单词给出了itertools.product给你的确切信息。。。然后,当有人发布产品答案时,你发布了一些其他示例,并说这不是你想要的,但没有解释预期输出应该是什么……听起来像是来自itertools的.product的工作,但这不是我想要的。事实上,我想要的是我需要做的事情的名称,这样我可以检查数学背景。笛卡尔乘积是的,你需要先转置。我想人们可能误解了这一点,因为您最初的输入示例等于它的transpose.lol。。。等一下,你给出两个字母单词的例子,这些单词给出了itertools.product给你的确切信息。。。然后,当有人发布产品答案时,你发布了一些其他示例,并说这不是你想要的,但没有解释预期的输出应该是什么…实际上,我尝试了字符串长度4,但这不是我期望的,只是编辑了问题事实上,我尝试了字符串长度4,这不是我期望的,刚刚编辑了这个问题这是一个很好的建议:)+1。。。我不确定这是否相等。。。但是假设每个字符对的位置都被锁定,那么它应该是。。。这是一段时间