【问题标题】:Repeating a function over multiple elements in a list在列表中的多个元素上重复一个函数
【发布时间】:2013-01-22 17:24:12
【问题描述】:

我已经写了这段代码

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(和编程)新手,我不太擅长使用函数。

【问题讨论】:

  • 向我们展示你目前编写的代码,兄弟
  • 我不明白这个问题——你能举一个更明确的例子吗,在这种情况下什么是细分?
  • @TheodrosZelleke- 它是一个生物程序。将需要很多时间来解释并且是不必要的。我想要的只是遍历文件,以便我可以获得段(列表的每个元素 = 段)编号及其相应的 GC%(我可以处理)
  • 更新了问题,'兄弟'@RashanGandi

标签: python fasta dna-sequence


【解决方案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

【讨论】:

  • 我正在使用 python 2.7。我想里面没有格式功能。
  • 和我一样,并且有(它是字符串上的实例方法)。
【解决方案2】:

你可以试试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 本身是一个列表,那应该不是问题,只要您相应地使用它即可。

这能回答你的问题吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 2015-12-02
    • 2013-09-27
    • 1970-01-01
    • 2018-03-11
    • 2021-03-03
    相关资源
    最近更新 更多