比较无序列表(也称为包)可能是一项具有挑战性的任务,尤其是在使用对象而不是整数等简单数据类型时。以下是解决此问题的三种有效方法:
对于可哈希的对象(即,可以转换为唯一的哈希值),可以使用 Python 集合模块中的 Counter() 方法。它创建一个类似字典的对象,其中键是列表的元素,值是它们各自的计数。使用此方法比较两个列表的线性时间复杂度为 O(n),其中 n 是列表的长度。
import collections def compare(s, t): return collections.Counter(s) == collections.Counter(t)
如果列表中的对象是可比较的(即它们具有定义的顺序),则对列表进行排序可以提供有效的比较机制。 Python 中的sorted() 方法对列表中的元素进行排序,从而可以轻松确定两个列表是否包含任意顺序的相同元素。此方法的时间复杂度为 O(n log n),其中 n 是列表的长度。
def compare(s, t): return sorted(s) == sorted(t)
如果对象既不可散列也不可排序,一个简单的方法是在两个列表的元素之间执行相等比较。对于第一个列表中的每个元素,我们将其从第二个列表中删除。如果在第二个列表中找不到第一个列表中的任何元素,则比较失败。这种方法的最坏情况时间复杂度为 O(n * n),其中 n 是列表的长度。
def compare(s, t): t = list(t) # make a mutable copy try: for elem in s: t.remove(elem) except ValueError: return False return not t
通过利用这些有效的比较技术,您可以有效地比较无序列表的对象,无论它们是可散列的、可排序的还是两者都不是。
以上是如何高效比较无序列表的对象?的详细内容。更多信息请关注PHP中文网其他相关文章!