由于某种原因,它不包括第一个条目,我无法弄清楚为什么?当我使用第一个条目时,即
">mm10_ensGene_ENSMUST00000038432 range=chr1:172956768-172956796 5'pad=0 3'pad=0 strand=+ repeatMasking=none"
在D_ID_seq
词典中,我得到了一个关键词。
为什么它适用于所有其他人而不是第一个?
in_file = [">mm10_ensGene_ENSMUST00000038432 range=chr1:172956768-172956796 5'pad=0 3'pad=0 strand=+ repeatMasking=none",
'TTTCCCCTTTTAGACACCCATAGAACAGA',
">mm10_ensGene_ENSMUST00000060693 range=chr1:174089038-174089041 5'pad=0 3'pad=0 strand=+ repeatMasking=none",
'AGCA',
">mm10_ensGene_ENSMUST00000061990 range=chr1:174250926-174250976 5'pad=0 3'pad=0 strand=- repeatMasking=none",
'CAACTGCCATGGTGGAAGGAACCAACAGGATCACAAGGACAATCATTCAG',
'A',
">mm10_ensGene_ENSMUST00000062353 range=chr1:92512027-92518515 5'pad=0 3'pad=0 strand=- repeatMasking=none",
'CCACGTCCTCGCACATGGGGAAGGAAGCTTCCCTTTTCTCTCAGTGCCTC',
'CTTTAAACCAGCTGTGGCTCAAGTGGGCCAGCTGCTCTGAGGGATTAGCC',
'AGGCTGCAGCAGAAGCCAGGTGTCTGGGGGTGACAGTGGACAGAGAGAAG',
'TGGTTTCAGAAGACTGAGGACAGACACACAGACACCGGCAGATCTCCAAG']
IDs = []
D_ID_seq = {}
D_ID_EJnum = {}
for indx in range(0,len(in_file)):
if in_file[indx][0] == '>':
IDs.append(in_file[indx])
temp_seq = ''
while indx:
for i in range((indx+1),len(in_file)):
if in_file[i][0] != '>':
temp_seq = temp_seq + in_file[i]
else:
break
D_ID_seq[in_file[indx]] = temp_seq
break
print D_ID_seq.keys()
结果
[">mm10_ensGene_ENSMUST00000062353 range=chr1:92512027-92518515 5'pad=0 3'pad=0 strand=- repeatMasking=none", ">mm10_ensGene_ENSMUST00000061990 range=chr1:174250926-174250976 5'pad=0 3'pad=0 strand=- repeatMasking=none", ">mm10_ensGene_ENSMUST00000060693 range=chr1:174089038-174089041 5'pad=0 3'pad=0 strand=+ repeatMasking=none"]
答案 0 :(得分:1)
问题是你的while
循环。对于列表的第一个元素,indx
为0. 0在布尔上下文中计算为False
,因此您的循环永远不会对第一个元素执行。由于您从不修改循环中的indx
并依赖break
退出,因此您可以使用while True:
代替{{1}}。
还有其他算法可以不重新处理序列行,但这是对列出的代码的最简单更改。