这就是我所拥有的,但它似乎有点多余.也许在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
Run Code Online (Sandbox Code Playgroud)
Nad*_*mli 12
如果字符串足够长,可能是最有效的方法:
import string
def complementary_strand(self, strand):
return strand.translate(string.maketrans('TAGCtagc', 'ATCGATCG'))
Run Code Online (Sandbox Code Playgroud)
这是利用translate和maketrans方法.您还可以在函数外部移动转换表:
import string
def __init__(self, ...):
self.trans = string.maketrans('TAGCtagc', 'ATCGATCG')
def complementary_strand(self, strand):
return strand.translate(self.trans)
Run Code Online (Sandbox Code Playgroud)
更好的是制作发电机,而不是:
TRANS = { "T": "A", "A": "T", "G": "C", "C": "G" }
def complementary_strand(self, strand):
for base in strand.upper():
yield TRANS[base]
Run Code Online (Sandbox Code Playgroud)
然后你可以以任何你想要的方式使用它,并且迭代器更有效:
for base in strand.complementary_strand():
# Do something
Run Code Online (Sandbox Code Playgroud)