||
序列反向和反向互补是进行生物信息分析的常见做法。为了实现序列的反向和者反向互补,可以采用不同的方法。这里使用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('for..loop ori:', seq) print('for..loop rev:', obj_seq.rev) print('for..loop rvs:', obj_seq.rev_com) out1 = """ output ori: GGCAGCAGCGACACnncancaacagctagcatgcaca rev: acacgtacgatcgacaacnacnnCACAGCGACGACGG rvs: tgtgcatgctagctgttgntgnnGTGTCGCTGCTGCC """
二. 面向对象编程(OOP)中用recursion实现DNA序列反向和反向互补。
class SeqRec: def __init__(self, seq): self.seq = seq self.seq_cp = seq @property def rev(self): if self.seq == "": return "" else: base = self.seq[0] self.seq = self.seq[1:] return self.rev + base @property def rev_com(self): rc_dic = dict(zip('ATCGNatcgn', 'TAGCNtagcn')) if self.seq_cp == "": return "" else: base = self.seq_cp[0] self.seq_cp = self.seq_cp[1:] return self.rev_com + rc_dic[base] seq = 'GGCAGCAGCGACACnncancaacagctagcatgcaca' obj_seq = SeqRec(seq) print('recursion ori:', seq) print('recursion rev:', obj_seq.rev) print('recursion rvs:', obj_seq.rev_com) out2 = """ output ori: GGCAGCAGCGACACnncancaacagctagcatgcaca rev: acacgtacgatcgacaacnacnnCACAGCGACGACGG rvs: tgtgcatgctagctgttgntgnnGTGTCGCTGCTGCC """
使用foo...loop不需要额外定义序列的复制属性,但使用recursion却需要定义,因为递归本身会对序列的值进行修改。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-9 12:06
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社