我阅读了关于如何bisect
在元组列表上使用的问题,并使用该信息来回答该问题。它有效,但我想要一个更通用的解决方案。
由于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))
我得到了正确的结果,因为我知道noy
大于 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,))
它奏效了。但这感觉像是一个糟糕的黑客攻击。任何干净的解决方案?