如何在python中使用any进行n^2搜索

2024-06-07 13:07:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我如何搜索列表X中是否有a,以便在同一列表X中有b,以便谓词p(a,b)显式返回true

也就是说,由于p是一个交换函数,并且可能需要大量计算,如果我已经调用了p(a,b),那么我希望避免调用p(b,a)


Tags: 函数true列表谓词
3条回答

我终于找到了一个解决办法。我假设python列表对列表有固定的时间访问

any(p(X[a],X[b]) for a in range(len(X)) for b in range(a,len(X)))

您通常可以使用^{} comparator定义自定义类以使其成为可排序类型,或使用自定义^{} method使其成为可哈希类型(还必须定义__eq__

创建对象时,将其作为自定义类型的实例,而不是通常的对象

class OrderableCustomType(WhateverBaseType):

    def __lt__(self, other):
        return self.some_property < other.some_property
class HashableCustomType(WhateverBaseType):

    def __eq__(self, other):
        return self.some_property == other.some_property

    def __hash__(self):
        return hash(self.some_property)

您可以使用此选项将多个属性合并为一个比较(例如身高和体重),并借此机会缓存昂贵的比较计算(例如,如果需要网络请求)

^{}生成元组序列而不重复:

any(p(a,b) for a,b in itertools.combinations(values, 2))

相关问题 更多 >

    热门问题