生信(二)——反向互补序列

原创: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中给出。

如果有任何问题欢迎交流!

(公众号:生信了)

发表回复

相关推荐

杭州傑仕健身(星光城店)維權退款全過程

歷時3個月(6月8日辦卡以後,9月30日全款退款到位)被傑仕健身套路後,終於全款到手。在此期間,妥協還是堅持,經歷瞭多次糾...

· 2分钟前

重装展新颜 启航新征程 | 平安银行深圳梅林支行喜迎重装开业

夏日和煦,生机勃勃。为进一步优化网点硬件设施,提升金融服务水平,改善客户体验,6月2日,平安银行深圳梅林支行重装开业, ...

· 3分钟前

走进西欧中世纪贵族的世界,看欧洲贵族老爷们,家族的兴衰荣辱

在阅读此文前,诚邀您点击一下“关注”,既方便您进行讨论与分享,又给您带来不一样的参与感,感谢您的支持。

· 3分钟前

9CrSi合金工具鋼 材料 鍛造圓鋼 圓棒 9SiCr模具鋼板材 線材

9SiCr合金結構鋼9SiCr鋼執行標準:GB/T 1299—2000,是低合金刃具用鋼,但也常常制作冷作模具零件,效果很好。它比鉻鋼(Cr2或...

· 5分钟前

【中国十大名花系列】十里飘香-桂花

中国十大名花分别蕴含着我国不同层面的精神文化底蕴,有着深厚而浓重的历史内涵,各自在花卉界中独树一帜,标志着我国传统文 ...

· 5分钟前