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

这个问题已经有一个答案在这里:            >            How to efficiently compare two unordered lists (not sets) in Python?                                    9个答案                            对不起,简单的问题,但我很难找到答案。

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

例如:

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

我想要x == y来求值为True。

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

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

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

如果元素也是唯一的,你也可以转换为集合(同样asymptotic运行时,可能在实践中有点快):

set(x) == set(y)

如果元素不是可哈希的,但可排序,另一个替代(O(n log n)中的运行时)

sorted(x) == sorted(y)

如果元素既不可哈希也不可排序,您可以使用以下辅助函数。注意,它将是相当慢(O(n 2)),并且通常不应该在不可避免的和不可排序的元素的深奥情况之外使用。

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
http://stackoverflow.com/questions/8866652/determine-if-2-lists-have-the-same-elements-regardless-of-order

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python – 确定2个列表是否具有相同的元素,而不管顺序如何? [重复]