小编典典

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

all

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

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

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


阅读 95

收藏
2022-06-30

共1个答案

小编典典

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
2022-06-30