gpt4 book ai didi

使用起始密码子和终止密码子查找编码 DNA 的 Python 代码

转载 作者:行者123 更新时间:2023-11-28 18:34:14 31 4
gpt4 key购买 nike

所以最近我一直在尝试编写一个程序,根据起始密码子和终止密码子来检测和剪切 DNA 序列的编码部分。

最终目标是比较 2 个长度均为 240 个核苷酸的序列,但其中一个序列会导致镰状细胞病,因此您想了解两者产生的编码部分之间的差异。

这是我到目前为止编写的代码,它实际上适用于它附带的序列。

sequence = "CCATGCTTGATCA"
sequence_list = list(sequence)
codon_list = ["ATG", "TAA", "TAG", "TGA"]
position_list = []

length_sequence = len(sequence)
length_codon = len(codon_list)
length_position = len(position_list)

n = length_sequence-1
while n >= 0:

for i in range(0, len(codon_list)):
codon_sub_list = list(codon_list[i])

if sequence_list[n] == codon_sub_list[2] and sequence_list[n-1] == codon_sub_list[1] and sequence_list[n-2] == codon_sub_list[0]:
position_list.append(n-2)
print(sequence_list[n], "@", n)
print(sequence_list[n-1], "@", n-1)
print(sequence_list[n-2], "@", n-2)

n-=1

print(len(position_list))
print(sequence[position_list[length_position-1]:(position_list[0]+3)])

现在,我两天前做的结果非常有希望。正如预期的那样,它给出了以下结果:

A at location 9

G at location 8

T at location 7

G at location 4

T at location 3

A at location 2

[7,2]

ATGCTTGA

然而,今天我尝试通过尝试不同的序列来继续这项工作,这次是 240 个核苷酸长的序列之一。下面是两个序列以及它是哪一个。

镰状细胞病序列:GAGCCATCTATTGCTTACATTTGCTTCTGACACAACTGTGTCACTAGCAACCTCAAACACACCATGGTGCACCTGACCTCTGTGGAGAAGTCTGCCGTTACTGCCCTGTGGGGCAAGGTGAACGTGGATGAAGTTGGTGGTGAGGCCCTGGGCAGGTTGGTATCAAGGTTACAAGACAGGTTTAAGACTGAGACCAATAGATGATGGCATAGATGGCAGTGGT

正常序列:GAGCCATCTATTGCTTACATTTGCTTCTGACACAACTGTGTTCACTAGCAACCTCAAACACACACCATGGTGCACCTGACTCCTGAGGAGAAGTCTGCCGTTACTGCCCTGTGGGGCAAGGTGAACGTGGATGAAGTTGGTGGTGAGGCCCTGGGCAGGTTGGTATCAAGGTTACAAGACAGGTTTAAGGAGACCAATAGACTGACTGGGCATGTT

然而,这是我执行它得到的结果,我将快速列出核苷酸及其位置,因为它们中的大多数是无关紧要的,而且主要是最后一个才是重要的。

[G,211] [T,210] [A,209] [G,199] [A,198] [T,197] [A,187] [A,186] [T,185] [A,145] [G,144] [T,143] [A,133] [G,132] [T,131] [G,132] [T,131] [A,130] [A,123] [G,122] [T,121] [A,78] [G,77] [T,76] [G,68] [T,67] [A,66] [G,47] [A,46] [T,45] [A,29] [G,28] [T,27] [A,1] [G,0] [T,-1]

[209, 197, 185, 143, 131, 130, 121, 76, 66, 45, 27, -1]

No sequence, just an empty line

现在很明显,当在最后一个密码子 TGA 处出现问题时,它将 T 的位置标记为 -1,但是我不知道是什么原因导致的,并尝试调整几个值以某种方式使其工作,但没有成功在任何情况下都做。

我想知道是什么导致了这种情况,该怎么办?另外,我两天前做的这个主要是作为开始的草稿,可能还有其他可以做得更好的东西,所以如果有任何事情看起来有点草率,请找借口,在我看来,整个 while 循环可以做得更好,但在那我选择它的那一刻是因为一种不同的循环方法不起作用,真的不记得它到底是什么了。

注意:我截取了我的 IDLE 输出来给你一个想法:

最佳答案

我发现您的原始代码有点不清楚(从右边缘开始搜索对我来说违反直觉),所以我尝试编写替代代码。最重要的变化是我现在从左到右遍历序列,并通过将它们与子序列一次性比较来搜索密码子,而不是逐个核苷酸地搜索密码子。这是我的代码,有一些希望有用的评论。这是否满足您的需求?如果没有,请告诉我。

sequence = "GAGCCATCTATTGCTTACATTTGCTTCTGACACAACTGTGTTCACTAGCAACCTCAAACAGACACCATGGTGCACCTGACTCCTGTGGAGAAGTCTGCCGTTACTGCCCTGTGGGGCAAGGTGAACGTGGATGAAGTTGGTGGTGAGGCCCTGGGCAGGTTGGTATCAAGGTTACAAGACAGGTTTAAGGAGACCAATAGAAACTGGGCATGTGGAGACAGAGAAGACTCTTGGGTTTCT"
codon_list = ["ATG", "TAA", "TAG", "TGA"]

# store the starting positions of the codons
found_codon_positions = []

# note that we can use len() and [] with strings as well, no need to
# convert to list first
n = len(sequence)
k = 0
while k < n-2:
# extract a three-nucleotide subsequence
possible_codon = sequence[k:k+3]
if possible_codon in codon_list:
found_codon_positions.append(k)
k += 1

print('found codons at indices {}'.format(found_codon_positions))

print('extracted sequence:')
print(sequence[found_codon_positions[0]:found_codon_positions[-1]+3])

输出:

found codons at indices [27, 45, 66, 76, 121, 130, 131, 143, 185, 197, 209]
extracted sequence:
TGACACAACTGTGTTCACTAGCAACCTCAAACAGACACCATGGTGCACCTGACTCCTGTGGAGAAGTCTGCCGTTACTGCCCTGTGGGGCAAGGTGAACGTGGATGAAGTTGGTGGTGAGGCCCTGGGCAGGTTGGTATCAAGGTTACAAGACAGGTTTAAGGAGACCAATAGAAACTGGGCATG

关于使用起始密码子和终止密码子查找编码 DNA 的 Python 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34009041/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com