gpt4 book ai didi

python - 如何从索引 0、1 或 2 开始每三个索引分割一个字符串?

转载 作者:太空宇宙 更新时间:2023-11-03 15:53:38 25 4
gpt4 key购买 nike

我正在分析一个 RNA 序列,需要在其中编码密码子。我首先需要将核苷酸字符串分成三对列表,但我必须为我的函数提供一个 Reading_frame 参数,该参数从索引 1、2 或 3 处开始读取字符串。

我编写了这段代码,但不知道为什么它不起作用,每当我对任何索引执行此操作时,我都会得到一个不完全读取的列表。

sequence = self.sequence.upper()
split_sequence = []
while len(sequence) >= 3:
split_sequence.append(sequence[reading_frame:reading_frame + 3])
reading_frame = reading_frame + 3
sequence = sequence[reading_frame:]
return split_sequence

我还尝试使用条件和正则表达式,但不知道如何为索引(reading_frame)1和2执行正则表达式

if reading_frame == 0:
split_sequence = re.findall(r'...', sequence)

if reading_frame == 1:
split_sequence = re.findall(r'', sequence)

if reading_frame == 2:
split_sequence = re.findall(r'', sequence)

关于如何修复这些方法有什么想法,或者有没有更简单的方法来做到这一点?谢谢!

最佳答案

这是一个带有框架参数的生成器:

def codons(seq,frame):
n = len(seq)
for i in range(frame - 1, n - 2, 3):
yield seq[i:i+3]

例如:

test = 'ACTGCAGCATCAGCCATGCAACT'

for i in range(1,4):
print(list(codons(test,i)))

输出:

['ACT', 'GCA', 'GCA', 'TCA', 'GCC', 'ATG', 'CAA']
['CTG', 'CAG', 'CAT', 'CAG', 'CCA', 'TGC', 'AAC']
['TGC', 'AGC', 'ATC', 'AGC', 'CAT', 'GCA', 'ACT']

作为生成器,您可以按如下方式循环密码子:

>>> for codon in codons(test,1): print(codon)

ACT
GCA
GCA
TCA
GCC
ATG
CAA

请注意,生成器始终生成长度为 3 的完整密码子。如果给定的阅读框架以长度为 1 或 2 的片段结束,则生成器不会返回它。这种行为是设计使然,但如果您想要的话,可以很容易地将其修改为返回最终片段。

关于python - 如何从索引 0、1 或 2 开始每三个索引分割一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41006466/

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