在 Python 中按值比较两个列表



例如,a = [1,1,3,4]b = [3,1,4,1],我希望结果匹配。 如果一个列表具有另一个列表没有的唯一值,则返回不匹配

如果你不关心元素的顺序,你可以这样做:

def compare(a, b):
return 'matched' if sorted(a) == sorted(b) else 'unmatched'
a = [1,1,3,4]
b = [3,1,4,1]
print(compare(a, b))
>>> 'matched'

假设我们有 2 个列表

x = ['3', '1']
y = ['1', '3']

解决方案 1:

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

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

这要求元素是可哈希的;运行时将以 O(n( 为单位,其中 n 是列表的大小。

解决方案 2:

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

set(x) == set(y)

解决方案 3:

如果元素既不可哈希也不可排序,则可以使用以下帮助程序函数。请注意,它将非常慢(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

Per Alexander:

result = 'matched' if a == b else 'unmatched'
print(result)

相关内容

  • 没有找到相关文章