Python 如何仅读取字符串或子字符串的特定部分
该项目的目标是从文本文件中打开并读取DNA序列,例如,如果子字符串是AGATC,那么连续子字符串也是,我们添加到计数器中,一旦连续子字符串不再是AGATC,目标是将其计数到范围内的最高分数,清除计数器并继续搜索,以查找最长的连续序列Python 如何仅读取字符串或子字符串的特定部分,python,cs50,Python,Cs50,该项目的目标是从文本文件中打开并读取DNA序列,例如,如果子字符串是AGATC,那么连续子字符串也是,我们添加到计数器中,一旦连续子字符串不再是AGATC,目标是将其计数到范围内的最高分数,清除计数器并继续搜索,以查找最长的连续序列 str_count = [] counter = 0 highest = 0 # read sequence with open(argv[2], "r")
str_count = []
counter = 0
highest = 0
# read sequence
with open(argv[2], "r") as seq:
seqRead = seq.read()
for i in range(len(seqRead)):
#search for consecutive AGATC
if i == 'A' and seqRead[i:i+6] == 'AGATC':
while i == 'A' and seqRead[i:i+6] == 'AGATC':
counter += 1
i = i + 5
if highest < counter:
highest = counter
counter = 0
else:
counter = 0
预期产量:最高=30
由于AGATC的最长连续出场时间为30次
输入:
AAGGTAAGTTTAGAATATAAAAGGTGAGTTAAATAGAATAGGTTAAAATTAAAGGAGATCAGATCAGATCAGATCTATCTATCTATCTATCTATCAGAAAAGAGTAAATAGTTAAAGAGTAAGATATTGAATTAATGGAAAATATTGTTGGGGAAAGGAGGGATAGAAGG
输出:最高=4
我是否弄错了如何使用seqRead[i:i+6]
我怎样才能做得更好呢?您的子字符串太长,
seqRead[I:I+6]
将给出长度为6个字符的字符串,而不是5个字符的字符串。该行(以及进行类似比较的另一行)应改为seqRead[i:i+5]
。此外,您还试图将迭代器(i
)与字母进行比较,而我认为您的目的是比较seqRead
中迭代器位置的字母i=='A'
应更改为seqRead[i]=='A'
:
str_count = []
counter = 0
highest = 0
# read sequence
with open(argv[2], "r") as seq:
seqRead = seq.read()
for i in range(len(seqRead)):
#search for consecutive AGATC
if seqRead[i] == 'A' and seqRead[i:i+5] == 'AGATC':
while seqRead[i] == 'A' and seqRead[i:i+5] == 'AGATC':
counter += 1
i = i + 5
if highest < counter:
highest = counter
counter = 0
else:
counter = 0
str_count=[]
计数器=0
最高=0
#读取顺序
打开(argv[2],“r”)如下:
seqRead=seq.read()
对于范围内的i(len(seqRead)):
#搜索连续的AGATC
如果seqRead[i]=“A”和seqRead[i:i+5]=“AGATC”:
而seqRead[i]=“A”和seqRead[i:i+5]=“AGATC”:
计数器+=1
i=i+5
如果最高<计数器:
最高=计数器
计数器=0
其他:
计数器=0
您的子字符串太长,seqRead[i:i+6]
将给出长度为6个字符的字符串,而不是5个字符的字符串。该行(以及进行类似比较的另一行)应改为seqRead[i:i+5]
。此外,您还试图将迭代器(i
)与字母进行比较,而我认为您的目的是比较seqRead
中迭代器位置的字母i=='A'
应更改为seqRead[i]=='A'
:
str_count = []
counter = 0
highest = 0
# read sequence
with open(argv[2], "r") as seq:
seqRead = seq.read()
for i in range(len(seqRead)):
#search for consecutive AGATC
if seqRead[i] == 'A' and seqRead[i:i+5] == 'AGATC':
while seqRead[i] == 'A' and seqRead[i:i+5] == 'AGATC':
counter += 1
i = i + 5
if highest < counter:
highest = counter
counter = 0
else:
counter = 0
str_count=[]
计数器=0
最高=0
#读取顺序
打开(argv[2],“r”)如下:
seqRead=seq.read()
对于范围内的i(len(seqRead)):
#搜索连续的AGATC
如果seqRead[i]=“A”和seqRead[i:i+5]=“AGATC”:
而seqRead[i]=“A”和seqRead[i:i+5]=“AGATC”:
计数器+=1
i=i+5
如果最高<计数器:
最高=计数器
计数器=0
其他:
计数器=0
在您的代码中,如果之前,而循环是冗余的。您正在切片不正确的子字符串,下面是更新和简化的代码:
范围内i的(len(seqRead)):
而seqRead[i:i+5]=“AGATC”:
计数器+=1
i+=5
如果计数器>最高值:
最高=计数器
计数器=0
在您的代码中,如果之前,而循环是冗余的。您正在切片不正确的子字符串,下面是更新和简化的代码:
范围内i的(len(seqRead)):
而seqRead[i:i+5]=“AGATC”:
计数器+=1
i+=5
如果计数器>最高值:
最高=计数器
计数器=0
您还可以提供一个示例输入吗?预期产量是多少?它可能是您正在阅读的文件的一部分。使用示例编辑,并期望更正我的错误,但我认为您的第一个示例有29个连续出现,而不是30@Kwsswart感谢您提供示例输入。请看我的答案!您还可以提供一个示例输入吗?预期产量是多少?它可能是您正在阅读的文件的一部分。使用示例编辑,并期望更正我的错误,但我认为您的第一个示例有29个连续出现,而不是30@Kwsswart感谢您提供示例输入。请看我的答案!我一开始试了+5,但它也不起作用,这就是为什么我认为这与我的阅读方式有关it@Kwsswart啊,好的,我将用您提供的示例输入进行测试then@Kwsswart我更新了我的答案,还有一个problem@Kwsswart没问题,是的,我一开始也做了,哈哈,一开始尝试了+5,但它也不起作用,这就是为什么我认为这与我的阅读方式有关it@Kwsswart啊,好的,我将用您提供的示例输入进行测试then@Kwsswart我更新了我的答案,还有一个problem@Kwsswart没问题,是的,一开始我做的太多了,因为我意识到我的代码太长了,因为我意识到我的代码太长了