很抱歉这个简单的问题,但是我很难找到答案。
当我比较两个列表时,我想知道它们是否“相等”,因为它们具有相同的内容,但是顺序不同。
例如:
x = ['a', 'b']
y = ['b', 'a']
我想x == y
评估True
。
您可以简单地检查带有x和y元素的多重集是否相等:
import collections
collections.Counter(x) == collections.Counter(y)
这要求元素是可散列的。运行时将位于中O(n)
,n
列表的大小在哪里。
如果元素也是唯一的,则还可以转换为集合(相同的渐近运行时,在实践中可能会快一点):
set(x) == set(y)
如果元素不是可哈希的而是可排序的,则另一个替代方法(在中的运行时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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句