2016-10-14 93 views
0

我有我所知道的增加值,这样的列表作为如何查找列表中子集的索引?

x = [1, 2, 3, 4, 5, 6] 

我正在寻找一些范围[min, max]内的子集的索引。例如。我想要

>> subset_indices(x, 2, 4) 
[1, 3] 
>> subset_indices(x, 1.1, 7) 
[1, 5] 

有没有一个很好的pythonic这样做?

+7

看平分线模块。它专为此设计,并具有您想要的确切功能。 –

+0

解决方案取决于列表的大小。从简单的搜索算法到树。 – jmugz3

+0

@KennyOstrom看起来很完美,谢谢。 – pingul

回答

1

在从肯尼·奥斯特罗姆和火山的建议,我实现它只是作为

import bisect 

def subset_indices(sequence, minv, maxv): 
    low = bisect.bisect_left(sequence, minv) 
    high = bisect.bisect_left(sequence, maxv, lo=low) 
    return [low, high] 
+1

您可以保存最小索引的值 - 并将其用于查找最大索引。这将使第二次查找更高效 - 这可能会影响大数据集。 – volcano

+0

@volcano好主意!我使用了相当多的数据,所以这个建议绝对有帮助。我将它添加到答案中。 – pingul