在Python中,在根据属性排序的列表中搜索最有效的方法是什么?下面是一个更精确的问题。你知道吗
示例:
class Any (object):
def __init__(self, attr_a, attr_b):
self.attr_a = attr_a
self.attr_b = attr_b
L = [Any(-3, 4), Any(-2, 1), Any(0, 2), Any(2, 1), Any(5, 6), Any(6, 3), Any(8, 2), Any(10, 1), Any(13, 5), Any(14, 3)]
L
根据属性attr_a
排序。列表L
的所有Any
实例都有不同的attr_a
值。搜索attr_a
等于x
的对象的attr_b
值的最有效方法是什么?你知道吗
您希望使用模块bisect及其
bisect_left
函数。在您的情况下,您需要在使用之前提取密钥列表,请参阅Other examples部分以获取详细解释。如果这是不可接受的,那么您可以实现自己版本的二进制搜索,这是一个简单的算法。你知道吗您应该采用二进制搜索来为您的} module 提供了一个起点:
attr_a
值找到正确的Any
对象。^{我所做的唯一一件事就是在这里的签名中添加一个
key
函数。key
接受一个callable,该callable返回与我们正在平分的值相对应的值。你知道吗现在可以使用二分法来查找
Any
索引:它返回匹配的
Any
的索引,或attr_a
值大于x
的下一个Any
对象的索引。您可能需要针对这些情况测试和/或调整算法。例如,您可以验证attr_a
确实与所需的值匹配:演示:
相关问题 更多 >
编程相关推荐