小编典典

确定2个列表是否具有相同的元素,而不管顺序如何?

all

抱歉这个简单的问题,但我很难找到答案。

当我比较 2 个列表时,我想知道它们是否“相等”,因为它们具有相同的内容,但顺序不同。

前任:

x = ['a', 'b']
y = ['b', 'a']

我想x == y评估为True.


阅读 90

收藏
2022-07-30

共1个答案

小编典典

您可以简单地检查具有 x 和 y 元素的多重集是否相等:

import collections
collections.Counter(x) == collections.Counter(y)

这要求元素是可散列的;运行时将在 中O(n),其中n是列表的大小。

如果元素也是唯一的,您还可以转换为集合(相同的渐近运行时,在实践中可能会快一点):

set(x) == set(y)

如果元素不可散列但可排序,则另一种选择(运行时 in O(n log n))是

sorted(x) == sorted(y)

如果元素既不可散列也不可排序,您可以使用以下辅助函数。请注意,它会很慢(O(n虏)),并且通常 不应
在不可散列和不可排序元素的深奥案例之外使用。

def equal_ignore_order(a, b):
    """ Use only when elements are neither hashable nor sortable! """
    unmatched = list(b)
    for element in a:
        try:
            unmatched.remove(element)
        except ValueError:
            return False
    return not unmatched
2022-07-30