跨多个时间间隔编制索引

时间:2017-07-05 12:12:03

标签: python

我试图从一组多个区间中提取第n个元素。我目前正在处理基因组序列。假设我们有一个中间有缺口的基因。该基因在整个DNA中的位置是:

gene = [100,110], [130,140]
# representing the lists [100,101,...,109] and [130, 131,...,139]
# the gene spans over these entries of the DNA, so it looks like -gene-gap-gene-

现在,对于基因内的位置(例如第10位),我想找到整个DNA上的相应位置(在本例中为109)。 该功能应该执行以下操作:

function(gene, 9) 
> 109
function(gene, 10)
> 130 

我的方法是显式生成两个序列,连接它们并获取此列表的第n个元素。但是,对于大型列表(因为它们碰巧发生),这是非常低效的。

有人能想到一个简单的方法吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

通用解决方案应该可以根据需要在基因中发挥尽可能多的空白:

gene = [[100,110], [130,140]]

def function(gene, n):
    for span in gene:
        span_len = span[1] - span[0] 
        if n <= span_len:
            return n + span[0] - 1
        else:
            n -= span_len

print(function(gene,10))
print(function(gene,11))

答案 1 :(得分:0)

您的function可以同时提供两个列表,您可以找到应该编制索引的列表以及使用列表大小的位置

所以如果您执行function(gene, 10)function(gene, 11)

10 <= len(List1)但是11 > len(list1)因此您知道在11的情况下您需要访问第二个列表,而正确的元素是11 - len(list1) -1,它是索引0但是第二个清单。