抱歉这个简单的问题,但我很难找到答案。
当我比较两个列表时,我想知道它们是否“相等”,因为它们具有相同的内容,但顺序不同。
Ex:
x = ['a', 'b']
y = ['b', 'a']
I want x == y
评估为True
.
您可以简单地检查包含 x 和 y 元素的多重集是否相等:
import collections
collections.Counter(x) == collections.Counter(y)
这要求元素是可散列的;运行时将在O(n)
, where n
是列表的大小。
如果元素也是唯一的,您也可以转换为集合(相同的渐近运行时,在实践中可能会更快一点):
set(x) == set(y)
如果元素不可散列,但可排序,则另一种选择(运行时O(n log n)
) is
sorted(x) == sorted(y)
如果元素既不可散列也不可排序,您可以使用以下辅助函数。请注意,它会很慢(O(n²)
)并且通常应该not可以在不可散列和不可排序元素的深奥情况之外使用。
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)