首页  >  文章  >  后端开发  >  如何有效比较不可哈希对象的无序列表?

如何有效比较不可哈希对象的无序列表?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-15 02:38:02957浏览

How to Efficiently Compare Unordered Lists of Non-Hashable Objects?

有效比较不可哈希对象的无序列表

无序列表(不是集合)在比较它们的相等性时提出了挑战,因为它们的元素可以按任意顺序排列。在处理不可散列的对象(例如用户定义类的实例)时,这种困难变得更加明显。

为了促进这种比较,存在具有不同时间复杂度的各种方法:

O(n)

对于可哈希对象,Counter提供了最优解:

def compare(s, t):
    return Counter(s) == Counter(t)

O(n log n)

如果对象是可排序的,sorted 提供了合适的替代方案:

def compare(s, t):
    return sorted(s) == sorted(t)

O(n * n)

当哈希性和可排序性都不可用时,可以采用使用相等性的直接方法:

def compare(s, t):
    t = list(t)   # make a mutable copy
    try:
        for elem in s:
            t.remove(elem)
    except ValueError:
        return False
    return not t

通过根据对象的性质选择适当的解决方案,您可以有效地比较无序列表,即使当元素不可散列或可排序。

以上是如何有效比较不可哈希对象的无序列表?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn