||
序列反向和反向互补是进行生物信息分析的常见做法。为了实现序列的反向和者反向互补,可以采用不同的方法。这里使用python语言,采用普通的for...loop结构和递归(recursion)实现序列的反向与反向互补。关于面向对象编程(Best Practices of Object Oriented Programming (OOP) - GeeksforGeeks)和递归(Recursion - GeeksforGeeks),可以参考链接中的说明。
一. 面向对象编程(OOP)中用for...loop实现DNA序列反向和反向互补。
class Seqfor: def __init__(self, seq): self.seq = seq @property def rev(self): rev_seq = '' for b in self.seq: rev_seq = b + rev_seq return rev_seq @property def rev_com(self): rc_dic = dict(zip('ATCGNatcgn', 'TAGCNtagcn')) rc = '' for b in self.seq: rc = rc_dic[b] + rc return rc seq = 'GGCAGCAGCGACACnncancaacagctagcatgcaca' obj_seq = Seqfor(seq) print(seq) print(obj_seq.rev) print(obj_seq.rev_com) """ output ori: GGCAGCAGCGACACnncancaacagctagcatgcaca rev: acacgtacgatcgacaacnacnnCACAGCGACGACGG rc: tgtgcatgctagctgttgntgnnGTGTCGCTGCTGCC """
二. 用recursion实现DNA序列反向和反向互补。
def rev(seq): if seq == "": return "" else: return rev(seq[1:]) + seq[0] def rev_com(seq): rc_dic = dict(zip('ATCGNatcgn', 'TAGCNtagcn')) if seq == "": return "" else: return rev_com(seq[1:]) + rc_dic[seq[0]] seq = 'GGCAGCAGCGACACnncancaacagctagcatgcaca' r = rev(seq) rc = rev_com(seq) print(seq) print(r) print(rc) """ output ori: GGCAGCAGCGACACnncancaacagctagcatgcaca rev: acacgtacgatcgacaacnacnnCACAGCGACGACGG rc: tgtgcatgctagctgttgntgnnGTGTCGCTGCTGCC """
两种实现方法,结果相同,在实际的工作中,可以灵活选择和使用。当然还可以采用replace,调用biopython库中的相关函数等来实现。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-21 21:27
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社