有人可以解释一下这里有什么问题:
def get_complementary_sequence(string):
dic = {'A':'T', 'C':'G', 'T':'A', 'G':'C'}
for a, b in dic.items():
string = string.replace(a, b)
return string
我得到'T'和'C'的正确结果,但'A'和'C'不会取代。真的卡住了。
字符串看起来像'ACGTACG'。
答案 0 :(得分:6)
您首先将所有A
替换为T
s,然后再将所有T
替换为A
s(包括您刚刚更换的A
>>> string = 'ACGTACG'
>>> string.replace('A', 'T')
'TCGTTCG'
>>> string.replace('A', 'T').replace('T', 'A')
'ACGAACG'
与!):
transmap = {ord('A'): 'T', ord('C'): 'G', ord('T'): 'A', ord('G'): 'C'}
return string.translate(transmap)
使用翻译地图,然后输入str.translate()
:
str.translate()
None
方法需要将代码点(整数)映射到替换字符(单个字符或代码点),或ord()
(从输入字符串中删除代码点)。 string
函数为我们提供了给定'from'字母的代码点。
这会在翻译地图中逐个查找{C}中A
中的字符,而不是替换所有T
,然后替换所有str.translate()
。
str.replace()
还有一个额外的好处,就是 比一系列>>> string = 'ACGTACG'
>>> transmap = {ord('A'): 'T', ord('C'): 'G', ord('T'): 'A', ord('G'): 'C'}
>>> string.translate(transmap)
'TGCATGC'
次呼叫更快
演示:
{{1}}
答案 1 :(得分:2)
可变数据是你的敌人:)
请参阅,您首先将所有A
替换为T
s,然后,在另一次迭代中,将所有T
替换为A
又来了。
什么有效:
# for Creek and Watson's sake, name your variables sensibly
complements = {ord('A'):'T', ord('C'):'G', ord('T'):'A', ord('G'):'C'}
sequence = "AGCTTCAG"
print(sequence.translate(complements))
打印TCGAAGTC
。