【发布时间】:2020-04-15 23:02:14
【问题描述】:
我希望在计算集合时使用自定义比较功能。我希望利用使用集合算法的效率。从技术上讲,我可以创建一个双循环来比较两个列表(保留,原始),但我认为这可能效率不高。
例如://
textlist = ["ravi is happy", "happy ravi is", "is happy ravi", "is ravi happy"]
set() 应该只返回其中 1 个元素,因为如果比较 items >= threshold 之间的相似性为 True,则比较函数将返回。
在 python 中。谢谢。
附言
真正的诀窍是我想使用我的string_compare(t1,t2): Float 进行比较,而不是散列和相等...
附言
C# 也有类似的功能: How to remove similar string from a list?
【问题讨论】:
-
这不是集合的工作方式。它们是使用哈希表实现的,因此您需要编写一个哈希函数,为所有相似的字符串返回相同的值。
-
此外,散列函数与对象相关联,而不是与集合相关联。所以你需要创建一个
str的子类。 -
例如。我将每个字符串转换为每个字符的唯一 ID 的 INT(假设为 ASCII)在计算两个元素是否相等时会调用 eq 吗?到目前为止,我有这样的事情:
class string_wrap(object): def __init__(self, t): self.t=t def __eq__(self, other): return string_compare(self.t, other.t) >= simthreshold def __hash__(self): return hash(self.t) -
它使用
__hash__查找哈希桶,然后搜索桶以找到__eq__的元素。 -
什么是
t?哈希函数必须返回一个数字。