I read 那个问题关于如何使用bisect
在元组列表上,我用这些信息来回答那个问题。它有效,但我想要一个更通用的解决方案。
Since bisect
不允许指定key
函数,如果我有这个:
import bisect
test_array = [(1,2),(3,4),(5,6),(5,7000),(7,8),(9,10)]
我想找到第一个项目x > 5
对于那些(x,y)
元组(不考虑y
无论如何,我目前正在这样做:
bisect.bisect_left(test_array,(5,10000))
我得到了正确的结果,因为我know那不y
大于 10000,所以bisect
指向我的索引(7,8)
。如果我把1000
相反,这是错误的。
对于整数,我可以这样做
bisect.bisect_left(test_array,(5+1,))
但在一般情况下,当可能存在浮动时,在不知道第二个元素的最大值的情况下如何处理?
test_array = [(1,2),(3,4),(5.2,6),(5.2,7000),(5.3,8),(9,10)]
我已经尝试过这个:
bisect.bisect_left(test_array,(min_value+sys.float_info.epsilon,))
它不起作用,但我已经尝试过:
bisect.bisect_left(test_array,(min_value+sys.float_info.epsilon*3,))
它起作用了。但这感觉像是一个糟糕的黑客。有什么干净的解决方案吗?