在列表中的多个元素上重复一个函数

时间:2013-01-22 17:24:12

标签: python fasta dna-sequence

我写了这段代码

import sys
file = open(sys.argv[1], 'r')
string = ''
for line in file:
    if line.startswith(">"):
        pass
    else:
        string = string + line.strip()
#print (list(string))
w = input("Please enter window size:")
test = [string[i:i+w] for i in range (0,len(string),w)]
seq = input("Please enter the number of sequences you wish to read:")
#print (test[0:seq])

它会生成一个如下所示的列表 -

['TAAAACACCC', 'TCAATTCAAG', 'GGTTTTTGAG', 'CGAGCTTTTT', 'ACTCAAAGAA', 'TCCAAGATAG', 'CGTTTAAAAA', 'TTTAGGGGTG', 'TTAGGCTCAG', 'CATAGAGTTT']

现在,下一步是在列表的每个元素中读取字母GC(或可以是CG)的出现。有没有办法以输出文件如下所示的方式遍历列表:

Segment 1- The %GC is <the calculated number>
Segment 2- The %GC is <the calculated number>
Segment 3- The %GC is <the calculated number>

由于文件很大而且段数(列表中的每个单独元素,如'TAAGATATA')我将会变得很大,我不知道如何得到这个数字(1,2, 3 ...)输出文件中的段。因为我是python(和编程)的新手,所以我不太擅长使用函数。

2 个答案:

答案 0 :(得分:1)

我不确定你在问什么。

inp = ['TAAAACACCC', 'TCAATTCAAG', 'GGTTTTTGAG', 'CGAGCTTTTT', 'ACTCAAAGAA', 'TCCAAGATAG', 'CGTTTAAAAA', 'TTTAGGGGTG', 'TTAGGCTCAG', 'CATAGAGTTT']

for i, segment in enumerate(inp):
    print "Segment {} - The %GC is {}".format(i, segment.count("GC"))

给出

Segment 0 - The %GC is 0
Segment 1 - The %GC is 0
Segment 2 - The %GC is 0
Segment 3 - The %GC is 1
Segment 4 - The %GC is 0
Segment 5 - The %GC is 0
Segment 6 - The %GC is 0
Segment 7 - The %GC is 0
Segment 8 - The %GC is 1
Segment 9 - The %GC is 0

答案 1 :(得分:0)

您可以在python中尝试map函数。 http://docs.python.org/3.1/library/functions.html#map提供了它的一般用法,但这是一个使用Python3的例子。

def func1(myObject):
    '''Trivial example function'''
    return myObject * 2
myList = [1,2,3]
myMap = map(func1,myList)
print(list(myMap))

Map在可迭代的每个项目上执行一个方法(例如列表,字符串等),并将每个方法执行的结果放入一个映射中,然后可以将其作为列表打印出来或像列表一样迭代。

如果你想让你的myObject成为一个列表本身,这应该不是问题,只要你这样使用它就好了。

这会回答你的问题吗?