背景:小鼠遗传学,我想计数两个实验室菌株之间的#突变,这取决于它们是否落在外显子边界内。
到目前为止,我生成了两个列表:
SNPs = [432, 534, 677, 788, 999]等~2e7值总计
exon_limits = [(3, 6), (42, 444), (679, 999)]等~5e5值总计
我只想计算属于外显子限制(list2)的SNP(SNP)的数量。这是我的代码:
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我对计算机科学的极限不太了解,但是第二季第七*第五集可能是太难处理了,对吧?此外,我还试图:
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只适合于一个元组,因此,如果有一种方法,使迭代停止,一旦它发现一个命中,将加快速度。任何帮助都将不胜感激!
发布于 2014-10-19 01:42:13
假设外显子限制具有包容性且不能重叠,并且两个列表都按升序排列:
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发布于 2014-10-19 01:39:07
要回答您的问题:有两个命令要从循环中分离出来。continue将继续使用下一个元素,break将保留整个循环。两种方法都只适用于最内部的循环。
此外,与其循环遍历范围列表,还应该使用类似树的结构,这样可以轻松找到与值匹配的范围。
https://stackoverflow.com/questions/26446277
复制相似问题