我阅读了关于如何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,))
它奏效了。但这感觉像是一个糟糕的黑客攻击。任何干净的解决方案?