Python: 合并两个函数
Python: Combining two functions
我通常不是 Python 用户。有人可以帮我把下面的两个功能合二为一吗?
def Reverse(Pattern):
rev = []
n = len(Pattern)
for i in range(n):
n = n-1
rev.append(Pattern[::-1])
return rev[0]
def Complement(Pattern):
complements = {"A":"T", "T":"A", "G":"C", "C":"G"}
nucleotides = []
for i in Pattern:
nucleotides += complements[i]
return "".join(nucleotides)
我想把它合并成这个:
def ReverseComplement(Pattern):
rev = []
n = len(Pattern)
for i in range(n):
n = n-1
rev.append(Pattern[::-1])
return rev[0] ##I've tried getting rid of this but it's not working properly
complements = {"A":"T", "T":"A", "G":"C", "C":"G"}
nucleotides = []
for i in rev:
nucleotides += rev[i]
return "".join(nucleotides)
作为测试,"ACACAC" 应该 return "GTGTGT"。
一般来说,如果您想组合两个您已经编写的函数,您可以简单地组合它们,只需调用一个函数并使用另一个函数的 return 值即可:
def reverse_complement(pattern):
return Reverse(Complement(pattern))
简单地重用您已经编写的代码几乎总是比复制+粘贴代码更可取。拥有多个代码版本只会增加错误出现的表面积,并增加维护代码所涉及的工作;如果你写一个版本的功能,你只需要写一组测试,你只需要修复一个地方的错误。
不过,在这种特殊情况下,您编写的很多代码都可以丢弃或简化。 Reverse
函数已经直接内置到 Python 中(名称为 reversed
),并且 Complement
函数可以缩短为单个 map
调用字典。总之就是:
def reverse_complement(pattern: str) -> str:
complements = {"A": "T", "T": "A", "G": "C", "C": "G"}
return "".join(map(complements.get, reversed(pattern)))
def ReverseComplement(Pattern):
complements = {"A":"G", "G":"A", "T":"C", "C":"T"}
nucleotides = []
for i in Pattern:
nucleotides += complements[i]
return "".join(nucleotides)
print(ReverseComplement("ACACAC"))
translate 函数可能是一个不需要列表的解决方案。
def rev_comp(pattern):
return pattern.translate(str.maketrans('ATGC', 'TACG'))[::-1]
pat = "ACACAC"
print(rev_comp(pat))
打印:
GTGTGT
我通常不是 Python 用户。有人可以帮我把下面的两个功能合二为一吗?
def Reverse(Pattern):
rev = []
n = len(Pattern)
for i in range(n):
n = n-1
rev.append(Pattern[::-1])
return rev[0]
def Complement(Pattern):
complements = {"A":"T", "T":"A", "G":"C", "C":"G"}
nucleotides = []
for i in Pattern:
nucleotides += complements[i]
return "".join(nucleotides)
我想把它合并成这个:
def ReverseComplement(Pattern):
rev = []
n = len(Pattern)
for i in range(n):
n = n-1
rev.append(Pattern[::-1])
return rev[0] ##I've tried getting rid of this but it's not working properly
complements = {"A":"T", "T":"A", "G":"C", "C":"G"}
nucleotides = []
for i in rev:
nucleotides += rev[i]
return "".join(nucleotides)
作为测试,"ACACAC" 应该 return "GTGTGT"。
一般来说,如果您想组合两个您已经编写的函数,您可以简单地组合它们,只需调用一个函数并使用另一个函数的 return 值即可:
def reverse_complement(pattern):
return Reverse(Complement(pattern))
简单地重用您已经编写的代码几乎总是比复制+粘贴代码更可取。拥有多个代码版本只会增加错误出现的表面积,并增加维护代码所涉及的工作;如果你写一个版本的功能,你只需要写一组测试,你只需要修复一个地方的错误。
不过,在这种特殊情况下,您编写的很多代码都可以丢弃或简化。 Reverse
函数已经直接内置到 Python 中(名称为 reversed
),并且 Complement
函数可以缩短为单个 map
调用字典。总之就是:
def reverse_complement(pattern: str) -> str:
complements = {"A": "T", "T": "A", "G": "C", "C": "G"}
return "".join(map(complements.get, reversed(pattern)))
def ReverseComplement(Pattern):
complements = {"A":"G", "G":"A", "T":"C", "C":"T"}
nucleotides = []
for i in Pattern:
nucleotides += complements[i]
return "".join(nucleotides)
print(ReverseComplement("ACACAC"))
translate 函数可能是一个不需要列表的解决方案。
def rev_comp(pattern):
return pattern.translate(str.maketrans('ATGC', 'TACG'))[::-1]
pat = "ACACAC"
print(rev_comp(pat))
打印:
GTGTGT