Pythonic 替换字符的方法
Posted
技术标签:
【中文标题】Pythonic 替换字符的方法【英文标题】:Pythonic way to replace chars 【发布时间】:2019-07-21 21:59:41 【问题描述】:我想用pythonic方法替换字符串中的一些字符。
A -> T
C -> G
G -> C
T -> A
例子:
AAATCGATTGAT
会变成
TTTAGCTAACTA
我做了什么:
def swap(string):
string = re.sub('A', 'aux', string)
string = re.sub('T', 'A', string)
string = re.sub('aux', 'T', string)
string = re.sub('C', 'aux', string)
string = re.sub('G', 'C', string)
string = re.sub('aux', 'G', string)
return string
效果很好,但我正在寻找一种更 Pythonic 的方式来实现它。
【问题讨论】:
【参考方案1】:使用带有理解和str.join
的字典:
translateDict =
"A" : "T",
"C" : "G",
"G" : "C",
"T" : "A"
s1 = "AAATCGATTGAT"
reconstructed = "".join(translateDict.get(s, s) for s in s1)
这里有live example
注意dict.get
的使用;万一字母不在字典中,我们就让它保持原样。
正如@bravosierra99 所建议的,您也可以简单地使用str.translate
:
reconstructed = s1.translate(string.maketrans(translateDict))
【讨论】:
感谢您的回答。这就是我要寻找的 如果你要做翻译,那么你应该做的很好。 programiz.com/python-programming/methods/string/translate @bravosierra99 您的链接在移动设备上无法阅读(屏幕外带有关闭按钮的大广告)。也许链接到官方文档或相关的 Stack Overflow 问题? @tripleee,答案中有官方文档的链接;)【参考方案2】:这是当前接受的- Chepner's deleted 答案的重构,它只调用一次maketrans
。
tt = str.maketrans("A":"T", "C":"G", "G":"C", "T": "A")
for s1 in "AGACAT", "TAGGAC", "ACTAGAA":
print(s1.translate(tt))
也许还指出您可以将结果从replace
链接起来,尽管这仍然很笨拙且效率低:
def acgtgca(s1):
return s1.replace(
"A", "\ue0fa").replace(
"G", "\ue0fb").replace(
"C", "G").replace(
"T", "A").replace(
"\ue0fb", "C").replace(
"\ue0fa", "T")
这避免了使用“aux”作为特殊标记来支持 Unicode Private Use Area 之外的两个任意字符。
但同样,maketrans
方法更简洁、更高效。
【讨论】:
也许另见***.com/questions/2484156/…,它有一个很好的选择,使用reduce
以上是关于Pythonic 替换字符的方法的主要内容,如果未能解决你的问题,请参考以下文章