原创:hxj7
关键词:reverse; complement; sequence;
如何得到一段基因序列的反向互补序列?这是基因测序领域经常遇到的问题。其实答案很简单,许多现成的软件都有这个功能。但是作为一个生信人,当然可以自己实现一个了。
首先想到的也是最基础的方法就是利用多个if…else…的语句进行判断选择。这种方法太笨拙,写出来的代码很不好看。今天我们分享几种好一点的方法。
Shell版本:tr命令和rev命令
Python版本:基于字典
代码如下:
这种方法简短优美,一目了然。与使用多个str.replace()函数相比其效率较高,因为上面的代码只需遍历原始字符串一次就够了,而多个str.replace()函数需要遍历字符串多次。
此外,上面的代码中字符串反向用到了一个Pythonic的写法:s[::-1]。更多Pythonic的句法可参考拙作《Python(一)让你的代码更加pythonic》。
C版本:基于数组
代码如下:
这种方法利用了字符的ascii码,即可以将字符映射为一个数字。而这个数字又可以转化为字符数组的序号(index),从而完成字符到字符的映射。C的版本是目前最快的!
值得注意的是,上面代码中的数组不光可以完成“AGCTN”这几种最常见堿基间的映射,还可以实现’B’与’V’、’D’与’H’、’R’与’Y’等简并堿基(Degenerate bases)间的映射。该数组由lh3在seqtk中给出。
如果有任何问题欢迎交流!
(公众号:生信了)
夏日和煦,生机勃勃。为进一步优化网点硬件设施,提升金融服务水平,改善客户体验,6月2日,平安银行深圳梅林支行重装开业, ...
9SiCr合金結構鋼9SiCr鋼執行標準:GB/T 1299—2000,是低合金刃具用鋼,但也常常制作冷作模具零件,效果很好。它比鉻鋼(Cr2或...