在python中如何有效的比较两个无序的列表是否包含完全同样的元素(不是set)?

枫铃3年前 (2021-08-07)Python303

问:

a = [1, 2, 3, 1, 2, 3]
b = [3, 2, 1, 3, 2, 1]

我们需要判断a和b是相等的,因为他们有同样的元素,尽管他们的顺序不同。
但是实际情况是,list会按照顺序比对内部元素,该如何解决?

答:
O(n)复杂度: 如果内部的对象是可hash的,那么Collections下的Counter方法是最好的。

from collections import Counter
def compare(s, t):
    return Counter(s) == Counter(t)

O(nlogn)复杂度:如果对象可以排序,那么sorted()方法是次优的。

def compare(s, t):
    return sorted(s) == sorted(t)

O(n*n)复杂度:如果对象既不可以hash又无法排序,我们可以使用以下方法:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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

相关文章

python 实现redis订阅发布功能

python 实现redis订阅发布功能

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串...

Python基础教程: with语句详解

with语句的应用场景...

Python基础教程:赋值语句和布尔值

一、赋值语句 1、序列...

Python enumerate函数

enumerate()是...

315道Python常见面试题

315道Python常见面试题

第一部分,Python基础篇 为什么学习Python? 通过什么途径学习的Python? Python...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。