首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:测试int列表中的int是否适合于2-int元组列表中的两个int。

Python:测试int列表中的int是否适合于2-int元组列表中的两个int。
EN

Stack Overflow用户
提问于 2014-10-19 01:17:30
回答 2查看 84关注 0票数 1

背景:小鼠遗传学,我想计数两个实验室菌株之间的#突变,这取决于它们是否落在外显子边界内。

到目前为止,我生成了两个列表:

SNPs = [432, 534, 677, 788, 999]等~2e7值总计

exon_limits = [(3, 6), (42, 444), (679, 999)]等~5e5值总计

我只想计算属于外显子限制(list2)的SNP(SNP)的数量。这是我的代码:

代码语言:javascript
复制
exonic = 0
non_exonic = 0
for k, l in exon_limits:
    for j in SNPs:
        if j <= k or j >= l:
            exonic += 1
        else:
            non_exonic += 1

我对计算机科学的极限不太了解,但是第二季第七*第五集可能是太难处理了,对吧?此外,我还试图:

代码语言:javascript
复制
exonic = 0
non_exonic = 0
for k, l in exon_limits:
    for j in SNPs:
        if j <= k or j >= l:
            exonic += 1
            print exonic
        else:
            non_exonic += 1

要了解python算法在哪里,但是在我中断程序之前,它似乎只是从7e6的0 ->上计算出来。

每个SNP只适合于一个元组,因此,如果有一种方法,使迭代停止,一旦它发现一个命中,将加快速度。任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

发布于 2014-10-19 01:42:13

假设外显子限制具有包容性且不能重叠,并且两个列表都按升序排列:

代码语言:javascript
复制
exonic = 0
snp_l = len(SNPs)
exon_l = len(exon_limits)
snp_idx = 0
exon_idx = 0

while snp_idx < snp_l and exon_idx < exon_l:
    if SNPs[snp_idx] < exon_limits[exon_idx][0]:
        snp_idx += 1
    elif SNPs[snp_idx] > exon_limits[exon_idx][1]:
        exon_idx += 1
    else:
        exonic += 1
        snp_idx += 1

non_exonic = snp_l - exonic
票数 1
EN

Stack Overflow用户

发布于 2014-10-19 01:39:07

要回答您的问题:有两个命令要从循环中分离出来。continue将继续使用下一个元素,break将保留整个循环。两种方法都只适用于最内部的循环。

此外,与其循环遍历范围列表,还应该使用类似树的结构,这样可以轻松找到与值匹配的范围。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26446277

复制
相关文章

相似问题

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