首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从同一函数内的两个循环中获得结果?

如何从同一函数内的两个循环中获得结果?
EN

Stack Overflow用户
提问于 2017-07-25 00:25:27
回答 1查看 51关注 0票数 2

我有一个函数可以为我的数据计算“或”类型的列表。

代码语言:javascript
复制
keyword = sys.argv[1]  # a name from the Name column

def exon_coords():
    exon_start_plus = [] # Plus strand coordinates
    exon_start_minus = [] # Minus strand coordinates
    for line in csv.reader(sys.stdin, csv.excel_tab):
        if len(line) >= 1:
            if re.search(keyword, str(line)): # If arg keyword exists in file
                if line[3] == "-": # If the DNA strand is a minus strand
                    chrompos = line[0] + ";" # Get the chromosome position
                    exon_start_minus.append(chrompos+line[1]) # Full exon position
                else: # all other lines are plus strands
                    chrompos = line[0] + ";" 
                    exon_start_plus.append(chrompos+line[1])

return exon_start_minus, exon_start_plus #Return lists

目标是编写一个包含坐标的输出文本文件。

代码语言:javascript
复制
with open(keyword+"_plus.txt", "w") as thefile:
    for item in exon_start_plus:
        thefile.write("{}, ".format(item))

或者,如果关键字导致了负线:

代码语言:javascript
复制
with open(keyword+"_minus.txt", "w") as thefile:
    for item in exon_start_minus:
        thefile.write("{}, ".format(item))

我试着把这些写文件放在代码中,但是返回函数不会给我完整的列表,我每次只写一个坐标。我将它们放在末尾,但这会导致空文件和空字符串-我希望将此作为一个函数,并让它确定关键字(即基因ID)是否具有给定的正/负链坐标(我有一个包含此数据的巨大数据文件,重点是不手动扫描ID并查看它们是否为正/负DNA链)。

谢谢!

编辑(示例数据,必须删除一些列,所以我也编辑了代码):

代码语言:javascript
复制
Position    Start   End Strand  Overhang    Name
1   3798630 3798861 +   .   ENSPFOG0000001
1   3799259 3799404 +   .   ENSPFOG0000001
1   3809992 3810195 +   .   ENSPFOG0000001
1   3810582 3810729 +   .   ENSPFOG0000001
2   4084800 4084866 -   .   ENSPFOG0000002
2   4084466 4084566 -   .   ENSPFOG0000002
2   4084089 4084179 -   .   ENSPFOG0000002

因此,如果我使用ENSPFOG0000001作为我的关键字,那么脚本应该运行并确定线束是正的,收集列表中的起始坐标,然后输出一个只包含这些坐标的文件。该文件将附加keyword+"_plus.txt“。如果它是ENSPFOG0000002,那么它将收集负链坐标,并创建一个文件,在其中创建keyword+"_minus.txt“。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-25 03:56:42

空列表的计算结果为False:

代码语言:javascript
复制
>>> exon_start_minus, exon_start_plus = [], []
>>> bool(exon_start_minus), bool(exon_start_plus)
(False, False)
>>> exon_start_minus, exon_start_plus = [1], []
>>> bool(exon_start_minus), bool(exon_start_plus)
(True, False)
>>> exon_start_minus, exon_start_plus = [1], [1]
>>> bool(exon_start_minus), bool(exon_start_plus)
(True, True)
>>> exon_start_minus, exon_start_plus = [], [1]
>>> bool(exon_start_minus), bool(exon_start_plus)
(False, True)

因此,您可以测试空列表并采取适当的操作

代码语言:javascript
复制
>>> if exon_start_plus:
    print('!!!')

!!!
>>> if exon_start_minus:
    print('!!!')

>>> 

要从函数检索两个列表,请执行以下操作:

代码语言:javascript
复制
exon_start_minus, exon_start_plus =  exon_coords()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45285609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档