2016-10-14 40 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