更符合Python风格的寻找互补DNA链方法
我有这个代码,但感觉有点多余。也许有经验的Python高手能帮我简化一下?这个代码的功能应该很容易理解。
def complementary_strand(self, strand):
''' Takes a DNA strand string and finds its opposite base pair match. '''
strand = strand.upper()
newstrand = ""
for i in range(0, len(strand)):
if strand[i] == "T":
newstrand += "A"
if strand[i] == "A":
newstrand += "T"
if strand[i] == "G":
newstrand += "C"
if strand[i] == "C":
newstrand += "G"
return newstrand
5 个回答
3
类似这样的内容
def complementary_strand(self, strand):
return strand.upper().translate(maketrans("TAGC", "ATCG"))
6
更好的方法是制作一个生成器:
TRANS = { "T": "A", "A": "T", "G": "C", "C": "G" }
def complementary_strand(self, strand):
for base in strand.upper():
yield TRANS[base]
这样你就可以随意使用它,而且迭代器的效率更高:
for base in strand.complementary_strand():
# Do something
12
如果字符串足够长,可能最有效的方法就是这样:
import string
def complementary_strand(self, strand):
return strand.translate(string.maketrans('TAGCtagc', 'ATCGATCG'))
这里使用了 translate 和 maketrans 这两个方法。你还可以把创建转换表的部分放到函数外面:
import string
def __init__(self, ...):
self.trans = string.maketrans('TAGCtagc', 'ATCGATCG')
def complementary_strand(self, strand):
return strand.translate(self.trans)