如何在Python中有效比较两个无序列表(不是集合)?

发布于 2021-02-02 23:13:46

a = [1, 2, 3, 1, 2, 3]
b = [3, 2, 1, 3, 2, 1]

a和b应该被视为相等,因为它们具有完全相同的元素,只是顺序不同。

问题是,我的实际列表将由对象(我的类实例)组成,而不是整数。

关注者
0
被浏览
90
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看