5

リストがあります:

timestamp_list = ['1377091800', '1377093000', '1377094500', '1377095500']

対象数:

ptime = 1377091810

タイムスタンプのどのペアの間にあるのかを調べたいと思いますptime。たとえば、この場合、最初のタイムスタンプと 2 番目のタイムスタンプの間にあります。1377091800したがって、値を目的の出力として返したいと思います。同様に、ptimeだった場合、3 番目と 4 番目のタイムスタンプの間1377091520にあるため、3 番目のタイムスタンプが返されるように1377091500します。

私のコード:

timestamp_list = ['1377091800', '1377093000', '1377094500', '1377095500']
ptime = 1377091810
for idx, value in enumerate(timestamp_list):
    val = long(value)
if idx!= len(timestamp_list)-1 and ptime >= val and ptime < long(timestamp_list[idx+1]):
    target = val
    break
elif (idx == len(timestamp_list)-1) and ptime >= val:
    target = val
else:
    pass
print target

出力: 1377091800

これに対するエレガントな解決策はありますか?私はPythonを始めたばかりなので、Pythonのすべての機能にまだ慣れていません。

どんな助けでも大歓迎です。

編集:

使用したソリューション:

import bisect
timestamp_list = ['1377091800', '1377093000', '1377094500', '1377095500']
ptime = str(1377093110)
if ptime in timestamp_list:
    target = ptime
else:
    index = bisect.bisect_right(timestamp_list, ptime)-1
    target = timestamp_list[index]
print target

出力:

1377093000
4

1 に答える 1

8

タイムスタンプはソートされているため、次のように使用できますbisect

In [24]: timestamp_list = [1377091800, 1377093000, 1377094500, 1377095500]

In [25]: timestamp_list[bisect.bisect_right(timestamp_list, 1377093100)]
Out[25]: 1377094500

(コードを明確にするために、文字列を整数に変換しました。)

于 2013-08-31T19:16:20.277 に答える