抱歉这个简单的问题,但我很难找到答案。
当我比较 2 个列表时,我想知道它们是否“相等”,因为它们具有相同的内容,但顺序不同。
前任:
x = ['a', 'b'] y = ['b', 'a']
我想x == y评估为True.
x == y
True
您可以简单地检查具有 x 和 y 元素的多重集是否相等:
import collections collections.Counter(x) == collections.Counter(y)
这要求元素是可散列的;运行时将在 中O(n),其中n是列表的大小。
O(n)
n
如果元素也是唯一的,您还可以转换为集合(相同的渐近运行时,在实践中可能会快一点):
set(x) == set(y)
如果元素不可散列但可排序,则另一种选择(运行时 in O(n log n))是
O(n log n)
sorted(x) == sorted(y)
如果元素既不可散列也不可排序,您可以使用以下辅助函数。请注意,它会很慢(O(n虏)),并且通常 不应 在不可散列和不可排序元素的深奥案例之外使用。
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