私は口述のリストを持っています、このようなもの:
test_data = [
{ 'offset':0, 'data':1500 },
{ 'offset':1270, 'data':120 },
{ 'offset':2117, 'data':30 },
{ 'offset':4055, 'data':30000 },
]
dictアイテムは、データに従ってリスト内でソートされ'offset'
ます。実際のデータははるかに長くなる可能性があります。
私がやりたいのは、特定のオフセット値を指定してリスト内のアイテムを検索することです。これは、正確にはそれらの値の1つではありませんが、その範囲内です。だから、二分探索は私がやりたいことです。
私は今、Pythonbisect
モジュールに気づきました。これは、既成の二分探索です。すばらしいですが、この場合は直接使用できません。自分のニーズに適応する最も簡単な方法は何だろうと思ってbisect
います。これが私が思いついたものです:
import bisect
class dict_list_index_get_member(object):
def __init__(self, dict_list, member):
self.dict_list = dict_list
self.member = member
def __getitem__(self, index):
return self.dict_list[index][self.member]
def __len__(self):
return self.dict_list.__len__()
test_data_index_get_offset = dict_list_index_get_member(test_data, 'offset')
print bisect.bisect(test_data_index_get_offset, 1900)
それは印刷します:
2
私の質問は、これが私がやりたいことをするための最良の方法ですか、それとも他のもっと簡単でより良い方法がありますか?