Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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还是bash?_Python_Bash - Fatal编程技术网

从字母组合生成字符串的最佳方法是python还是bash?

从字母组合生成字符串的最佳方法是python还是bash?,python,bash,Python,Bash,我需要生成字符串STA和STB STA和STB是长度为10的字符串,每个字符串只能包含字符A、T、G或C 我必须生成所有可能的STA组合,并根据STA生成STB 方法是,字符A总是与T和viceversa关联,而G总是与C和viceversa关联 因此,可能存在如下组合: STA: ATGC... STB: TACG... 或 等等 我想知道使用bash或python实现这一点的最佳方法是什么 谢谢我想说Python 请在此处查看字符串排列:。另一个要看的是Python+中的itertools

我需要生成字符串STA和STB

STA和STB是长度为10的字符串,每个字符串只能包含字符A、T、G或C

我必须生成所有可能的STA组合,并根据STA生成STB

方法是,字符A总是与T和viceversa关联,而G总是与C和viceversa关联

因此,可能存在如下组合:

STA: ATGC...
STB: TACG...

等等

我想知道使用bash或python实现这一点的最佳方法是什么

谢谢

我想说Python

请在此处查看字符串排列:。另一个要看的是Python+中的
itertools
。然而,我注意到您的需求更深入,但是您可能会发现在Python中添加必要的约束比在Bash中添加约束更容易

简单、干净、容易

现在,我不是Bash方面的专家,但是看看它,您必须有多行代码,根据您的组合反复重复几乎相同的文本。最好使用简单的组合,但不要使用链接组合。

我想说Python

请在此处查看字符串排列:。另一个要看的是Python+中的
itertools
。然而,我注意到您的需求更深入,但是您可能会发现在Python中添加必要的约束比在Bash中添加约束更容易

简单、干净、容易


现在,我不是Bash方面的专家,但是看看它,您必须有多行代码,根据您的组合反复重复几乎相同的文本。最好使用简单的组合,而不是链接的组合。

虽然我不知道bash,也不知道
排列
如何解决您的问题,但似乎
itertools.product
是一种相当简单的方法:

>>> s = 'atgc'
>>> d = dict(zip(s, 'tacg'))
>>> import itertools
>>> for i in itertools.product(s, repeat=10):
    sta = ''.join(i)
    stb = ''.join(d[x] for x in i)
虽然所提出的方法在通过替换
'atgc'
字符串(即查找
sta
字符串)获得所有可能的排列方面是有效的,但查找
stb
不是通过字典查找,而是通过翻译机制更有效:

>>> trans = str.maketrans(s, 'tacg')
>>> for i in itertools.product(s, repeat=10):
    sta = ''.join(i)
    stb = sta.translate(trans)

感谢Dave,他强调了更高效的解决方案。

虽然我不知道bash,也不知道
置换
如何解决您的问题,但似乎
itertools.product
是一种相当简单的方法:

>>> s = 'atgc'
>>> d = dict(zip(s, 'tacg'))
>>> import itertools
>>> for i in itertools.product(s, repeat=10):
    sta = ''.join(i)
    stb = ''.join(d[x] for x in i)
虽然所提出的方法在通过替换
'atgc'
字符串(即查找
sta
字符串)获得所有可能的排列方面是有效的,但查找
stb
不是通过字典查找,而是通过翻译机制更有效:

>>> trans = str.maketrans(s, 'tacg')
>>> for i in itertools.product(s, repeat=10):
    sta = ''.join(i)
    stb = sta.translate(trans)

感谢Dave,他强调了更有效的解决方案。

与您的实际问题无关,但与您(显然)正在做的事情相关,您是否签出了?

与您的实际问题无关,但与您(显然)正在做的事情相关,您是否签出了?

给您:

>>> from itertools import product
>>> seq = ("AGCT",) * 10
>>> STA = [''.join(a) for a in product(*seq)]
>>> STB = list(reversed(STA))
顺便提一下,
len(STA)
是220

itertools.product
在Python 2.6中提供

有关Python 2.5中
产品
的实现,请参见@hop的答案

>>> from itertools import product
>>> seq = ("AGCT",) * 10
>>> STA = [''.join(a) for a in product(*seq)]
>>> STB = list(reversed(STA))
顺便提一下,
len(STA)
是220

itertools.product
在Python 2.6中提供


参见@hop的答案,了解Python 2.5中
产品
的实现其他人已经说过如何生成STA

将字符串STA转换为等效字符串STB的最有效方法是使用字符串和函数

>>> import string
>>> s = "AGTC" * 100
>>> trans = string.maketrans("ATGC", "TACG")
>>> s.translate(trans)
'TCAG...TCAG'

在我的系统上,这比SilentGhost建议的对每个字符进行字典查找快约100倍。

其他人已经说过如何生成STA

将字符串STA转换为等效字符串STB的最有效方法是使用字符串和函数

>>> import string
>>> s = "AGTC" * 100
>>> trans = string.maketrans("ATGC", "TACG")
>>> s.translate(trans)
'TCAG...TCAG'
在我的系统上,这比SilentGhost建议的对每个字符进行字典查找快约100倍。

bash baby:)

巴什宝贝:)


原因是什么?我不是在争论,只是说“Python”对任何人都没有帮助。我同样可以说“我会说Bash”,而一个不够了解(比如提问)的人将无法确定这两个词之间的区别。我认为你说得太快了。;)原因是什么?我不是在争论,只是说“Python”对任何人都没有帮助。我同样可以说“我会说Bash”,而一个不够了解(比如提问)的人将无法确定这两个词之间的区别。我认为你说得太快了。;)为什么我会得到?:itertools.product(s,repeat=10)中的i:AttributeError:“module”对象没有属性“product”@Werner:因为您使用的是旧版本的Python,正如Kyle提到的,您至少需要Python 2.6。好的,太好了,现在它运行了!谢谢你的简短评论,sta和stb的长度为10个字符,我如何将它们更改为5个?好的,只需将repeat从10更改为5,对不起,我应该多睡一会儿:-P感谢编写的代码将sta转换为“CCCCCC”,stb转换为“GGGGGGGG”。为什么我会得到?:对于itertools.product中的i(s,repeat=10):AttributeError:'module'对象没有属性'product'@Werner:因为您使用的是旧版本的Python,正如Kyle提到的,您至少需要有Python 2.6。好的,太好了,现在它可以运行了!谢谢你的简短评论,sta和stb有10个字符长,我怎样才能将它们改为5?好的,只需将repeat从10改为5,对不起,我应该多睡一会儿:-P感谢编写的代码将sta命名为“CCCC”,将stb命名为“GGGGGGGG”。我看到的这个问题最优雅的答案是:我看到的这个问题最优雅的答案是: