如何在python中替换和反转字符串?

时间:2016-06-23 02:34:52

标签: python string reverse

这是我到目前为止所用的,它不是出于某种原因用G替换C.为什么会这样?

DNASeq=raw_input("Enter the DNA sequence here: ")
DNASeq=DNASeq.upper().replace(" ","")

reverse=DNASeq[::-1]

print reverse.replace('A','U').replace('T','A').replace('C','G').replace('G','C')

3 个答案:

答案 0 :(得分:3)

问题是您将C替换为G,然后将G替换为C。阻止您从一个转到另一个的一种简单方法是将C替换为g,因此它不会返回C,然后将结果大写:

gattaca="GATTACA"
rev = gattaca[::-1]
print rev.replace('A','u').replace('T','a').replace('C','g').replace('G','c').upper()

这正确地输出了UGUAAUC而不是UCUAAUC,就像你的例子一样。

更新

更多的Pythonic方式,并避免基于案例的黑客,并且因为字符串不需要被扫描五次而且更加有效,并且更明显的目的,将是:< / p>

from string import maketrans
transtab = maketrans("ATCG", "UAGC")
print rev.translate(transtab)

答案 1 :(得分:2)

正如已经指出的那样,问题是你首先用Gs替换所有Cs。我想抛弃这种方法,因为我认为它会是最有效的:

>>> complement = {'A':'U', 'G':'C', 'C':'G','T':'A'}
>>> seq = "GATTACA"
>>> "".join(complement[c] for c in seq)[::-1]
'UGUAAUC'
>>>

答案 2 :(得分:0)

你做了几乎正确的代码。 但是你需要理解的一件事是首先用G代替C,然后用C代替G.

  

.replace(&#39; C&#39;&#39; G&#39)。代替(&#39; G&#39;,&#39; C&#39)

从代码中删除.replace('G','C'),一切正常。

这是正确的代码:

DNASeq=raw_input("Enter the DNA sequence here: ")
DNASeq=DNASeq.upper().replace(" ","")

reverse=DNASeq[::-1]

print reverse.replace('A','U').replace('T','A').replace('C','G').replace('G','C')