查找列表指定的数字范围之间是否存在数字

时间:2013-08-31 19:11:51

标签: python

我有一个清单:

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

目标号码:

ptime = 1377091810

我想找出ptime位于哪一对时间戳之间。例如在这种情况下,它位于第一个和第二个时间戳之间。所以我想返回值1377091800作为所需的输出。 同样,如果ptime1377091520,那么我希望返回第三个时间戳,即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

1 个答案:

答案 0 :(得分:7)

由于时间戳已排序,您可以使用bisect

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

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

(我已将字符串转换为整数以保持代码清晰。)

相关问题