繁体   English   中英

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

[英]What is the best, python or bash for generating strings from combinations of letters?

我需要生成字符串STA和STB。

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

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

方式是,字符A始终与T关联,反之亦然,字符G与C关联,反之亦然。

因此可能是类似的组合:

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

要么

STA: GTTA...
STB: CAAT...

等等。

我想知道使用bash或python的最佳方法是什么

谢谢

我会说Python。

在这里查看字符串排列: 使用组合生成器(Python)进行排列 要看的另一件事是Python 2.6 +中的itertools在python中生成列表的所有排列 但是,我确实注意到您的需求更加深入,但是您可能会发现在Python中添加必要的约束比Bash更加容易。

简单,干净,容易。

现在,我不是Bash方面的专家,但是从它的角度来看,您将不得不有多行根据您的组合一遍又一遍重复几乎相同的文本。 使用简单的组合而不是链接的组合会很好。

虽然我不了解bash,也看不到permutations如何解决您的问题,但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,他着重介绍了更有效的解决方案。

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

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

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

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

干得好:

>>> from itertools import product
>>> seq = ("AGCT",) * 10
>>> STA = [''.join(a) for a in product(*seq)]
>>> STB = list(reversed(STA))

len(STA)是2 20

itertools.product在Python 2.6中可用。

有关Python 2.5中product的实现,请参见此处的 @hop答案。

bash宝贝:)

STA=$(echo {A,C,T,G}{A,C,T,G}{A,C,T,G}{A,C,T,G}{A,C,T,G}{A,C,T,G}{A,C,T,G}{A,C,T,G}{A,C,T,G}{A,C,T,G})
STB=$(echo $STA | tr ATCG TAGC)

echo $STA
echo $STB

与您的实际问题无关,但与您(显然)在做什么相关,您是否签出了BioPython

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM