簡體   English   中英

查找核苷酸在同一個 position 中出現的次數

[英]Finding how many times a nucleotide appear in the same position

我是 python 的新手,我試圖解決一個問題,我得到了一些 dna 序列,例如: sequences = ["GAGGTAAACTCTG", "TCCGTAAGTTTTC", "CAGGTTGGAACTC", "ACAGTCAGTTCAC", "TAGGTCATTACAG", "TAGGTACTGATGC"]

我想知道所有這些序列的每個 position 中有多少次核苷酸“A”(答案應該是“A”:[1、4、1、0、0、3、4、1、1、3 , 0, 2, 0] 在這種情況下)。 我試圖做的是:

'A_pos = {"A":[sum(int(i[0]=="A") for i in sequences), sum(int(i[1]=="A") for i in sequences), sum(int(i[2]=="A") for i in sequences),'

依此類推到索引中的每個 position。 我試圖讓它一次檢查所有位置,而不是手動執行每個 position。

您發布的代碼只是部分代碼,但您在每個索引上迭代sequences一次。 您可以使用zip一次計算它們(即使最后您必須讀取每個字符一次,所以我的解決方案只更改讀取順序):

A = []
for s in zip(*sequences):
    print(s)
    num_a = 0
    for nuc in s:
        if nuc == "A":
            num_a += 1
    A.append(num_a)
print(A)

s的內容是:

('G', 'T', 'C', 'A', 'T', 'T')
('A', 'C', 'A', 'C', 'A', 'A')
('G', 'C', 'G', 'A', 'G', 'G')

以此類推,您會看到所有序列一次讀取一個字符,結果是:

[1, 4, 1, 0, 0, 3, 4, 1, 1, 3, 0, 2, 0]

如果序列的長度不同,您可以使用itertools.zip_longest用另一個字符填充較短的序列。

干杯!

您已經接近了,但您需要跟蹤索引而不是單個查找

[sum(x[i] == "A" for x in sequences) for i in range(len(sequences[0]))]

這將同時遍歷每個索引,並為每個核苷酸出現添加一個。

result = {'A': 13*[0], 'G': 13*[0], 'T': 13*[0], 'C': 13*[0]}
for index, sequence in enumerate(zip(*sequences)):
    for nucleotide in sequence:
        result[nucleotide][index] += 1

Output:

{'A': [1, 4, 1, 0, 0, 3, 4, 1, 1, 3, 0, 2, 0], 'G': [1, 0, 4, 6, 0, 0, 1, 3, 1, 0, 0, 1, 2], 'T': [3, 0, 0, 0, 6, 1, 0, 2, 3, 3, 2, 3, 0], 'C': [1, 2, 1, 0, 0, 2, 1, 0, 1, 0, 4, 0, 4]}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM