1. 程式人生 > >生信(二)反向互補序列

生信(二)反向互補序列

關鍵詞:reverse; complement; sequence;

**如何得到一段基因序列的反向互補序列?**這是基因測序領域經常遇到的問題。其實答案很簡單,許多現成的軟體都有這個功能。但是作為一個生信人,當然可以自己實現一個了。

首先想到的也是最基礎的方法就是利用**多個if…else…**的語句進行判斷選擇。這種方法太笨拙,寫出來的程式碼很不好看。今天我們分享幾種好一點的方法。

Shell版本:tr命令和rev命令 在這裡插入圖片描述

Python版本:基於字典 程式碼如下: 在這裡插入圖片描述 這種方法簡短優美,一目瞭然。與使用多個str.replace()函式相比其效率較高,因為上面的程式碼只需遍歷原始字串一次就夠了,而多個str.replace()函式需要遍歷字串多次。

此外,上面的程式碼中字串反向用到了一個Pythonic的寫法:s[::-1]。更多Pythonic的句法可參考拙作《Python(一)讓你的程式碼更加pythonic》。

C版本:基於陣列 程式碼如下: 在這裡插入圖片描述 這種方法利用了字元的ascii碼,即可以將字元對映為一個數字。而這個數字又可以轉化為字元陣列的序號(index),從而完成字元到字元的對映。

值得注意的是,上面程式碼中的陣列不光可以完成“AGCTN”這幾種最常見鹼基間的對映,還可以實現’B’與’V’、’D’與’H’、’R’與’Y’等簡併鹼基Degenerate bases)間的對映。該陣列由lh3在seqtk中給出。

如果有任何問題歡迎交流!

(公眾號:生信了)

在這裡插入圖片描述