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

2024-04-29 19:58:59 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

SNPs = [432, 534, 677, 788, 999]etc~2e7值合计

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

我只想统计一下属于外显子限制(list2)的单核苷酸多态性(list1)的数量。这是我的密码:

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

我不太了解计算机科学的局限性,但2e7*5e5可能太难处理了,对吧?。此外,我还尝试:

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在算法中的位置,但在我中断程序之前,它似乎只是从0计数到大于7e6。你知道吗

每个SNP只适合于一个元组,因此如果有一种方法可以让迭代在找到一个命中点后停止,那么它就会加快速度。任何帮助都将不胜感激!你知道吗


Tags: orinforifetc遗传学else背景
2条回答

假设外显子限制是包含的并且不能重叠,并且两个列表都是按升序排列的:

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

回答您的问题:有两个命令可以中断循环。continue将立即继续下一个元素,break将离开整个循环。两者都只适用于最内部的循环。你知道吗

另外,不要在范围列表中循环,应该使用树状结构,这样可以很容易地找到与值匹配的范围。你知道吗

相关问题 更多 >