Python脚本将序列添加到一起。不包括第一个元素?

时间:2014-02-04 23:55:02

标签: python dictionary append sequence

由于某种原因,它不包括第一个条目,我无法弄清楚为什么?当我使用第一个条目时,即

">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"]

1 个答案:

答案 0 :(得分:1)

问题是你的while循环。对于列表的第一个元素,indx为0. 0在布尔上下文中计算为False,因此您的循环永远不会对第一个元素执行。由于您从不修改循环中的indx并依赖break退出,因此您可以使用while True:代替{{1}}。

还有其他算法可以不重新处理序列行,但这是对列出的代码的最简单更改。