2024-06-07 13:07:50 发布
网友
我如何搜索列表X中是否有a,以便在同一列表X中有b,以便谓词p(a,b)显式返回true
X
a
b
p(a,b)
也就是说,由于p是一个交换函数,并且可能需要大量计算,如果我已经调用了p(a,b),那么我希望避免调用p(b,a)
p
p(b,a)
我终于找到了一个解决办法。我假设python列表对列表有固定的时间访问
any(p(X[a],X[b]) for a in range(len(X)) for b in range(a,len(X)))
您通常可以使用^{} comparator定义自定义类以使其成为可排序类型,或使用自定义^{} method使其成为可哈希类型(还必须定义__eq__)
__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))
我终于找到了一个解决办法。我假设python列表对列表有固定的时间访问
您通常可以使用^{} comparator 定义自定义类以使其成为可排序类型,或使用自定义^{} method 使其成为可哈希类型(还必须定义
__eq__
)创建对象时,将其作为自定义类型的实例,而不是通常的对象
您可以使用此选项将多个属性合并为一个比较(例如身高和体重),并借此机会缓存昂贵的比较计算(例如,如果需要网络请求)
^{} 生成元组序列而不重复:
相关问题 更多 >
编程相关推荐