[译]在python中如何有效的比较两个无序的列表是否包含完全同样的元素(不是set)?
问:
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又无法排序,我们可以使用以下方法:
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
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法
· Vite CVE-2025-30208 安全漏洞