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

Posted

技术标签:

【中文标题】如何在 python 中替换和反转字符串?【英文标题】:How do you replace and reverse a string in python? 【发布时间】:2016-10-25 04:26:13 【问题描述】:

这就是我目前所拥有的,由于某种原因,它没有用 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')

【问题讨论】:

您将 C 替换为 G,然后将(所有)G 替换为 C。您期望什么?你的输出中会有很多 C,但没有 G。 【参考方案1】:

问题是您将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 的方式,避免基于大小写的 hack,更高效,因为字符串不需要被扫描五次,并且目的更明显,将是:

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

【讨论】:

是的,这对我来说应该从一开始就很明显!它也比我基于字典的方法快得多,在 python 3.5 ***.com/questions/34287893/…【参考方案2】:

您已经完成了几乎正确的代码。 但这里您需要了解的一件事是首先将 C 替换为 G,然后再次将 G 替换为 C。

.replace('C','G').replace('G','C')

只需从您的代码中删除 .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')

【讨论】:

【参考方案3】:

正如已经指出的那样,问题在于您首先将所有 C 替换为 G。我想采用这种方法,因为我认为它是最有效的:

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

【讨论】:

以上是关于如何在 python 中替换和反转字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何实现字符串的反转及替换?

Java中如何实现字符串反转?

python 中如何将一个字符反转

如何使用for循环在python中反转字符串数字

Python 中的反转字符串:reversed()切片等

为啥在 Python 2.7 中手动字符串反转比切片反转更糟糕? Slice 中使用的算法是啥?