如何有效地比较两个无序列表(而不是集合)?

2023-12-24

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

a 和 b 应该被认为是相等的,因为它们具有完全相同的元素,只是顺序不同。

问题是,我的实际列表将由对象(我的类实例)组成,而不是整数。


O(n): The 柜台() https://docs.python.org/3.5/library/collections.html#collections.Counter方法是最好的(如果你的对象是可散列的):

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

O(n log n): The sorted() https://docs.python.org/3.5/library/functions.html#sorted方法是次佳的(如果您的对象是可订购的):

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

O(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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何有效地比较两个无序列表(而不是集合)? 的相关文章

随机推荐

  • java有“Linked ConcurrentHashMap”数据结构吗?

    我需要一个 LinkedHashMap 并且线程安全的数据结构 我怎样才能做到这一点 您可以将映射包装在 Collections synchronizedMap 中以获取维护插入顺序的同步哈希映射 这不像 ConcurrentHashMap
  • 使用正则表达式过滤对象数组

    我有一个这样的数据数组 const data Date 2018010101 color blue Date 2018010102 color blue Date 2018010103 color red Date 2018010104 c
  • Angular - 类型“string”不可分配给类型“boolean”

    角度 4 3 1角度 CLI 1 2 3打字稿 2 3 4 组件打字稿文件 public saveName string public overwrite boolean 以下标记失败并显示类型 string 不可分配给类型 boolean
  • 向 JNA 类 Java (Kernel32) 添加另一个方法

    我试图使用 WIN32 dll 中的方法 未包含在 JNA 中 方法是获取产品信息 我在单独的项目和工作中尝试这个 public interface Kernel32 extends Library public boolean GetPr
  • SQL Server DACPAC 部署删除用户/角色/权限

    我正在使用 DACPAC 部署 Azure SQL Server 数据库 每次我部署时 它都会删除我的用户 角色和权限 即使我在我正在使用的发布配置文件中明确告诉它不要这样做 发布配置文件定义为
  • Amazon S3 WebDAV 访问

    我想在不使用第三方软件的情况下访问我的 Amazon S3 存储桶 而只需通过大多数操作系统中提供的 WebDAV 功能即可 有没有办法做到这一点 对我来说重要的是不需要第三方软件 有多种方法可以做到这一点 不知道你的情况如何 所以这里是
  • 在 TypeScript 中使用元组(类型推断)

    给出这个稍微人为的例子 List Of Names map name index gt name index 2 map name num gt 为什么 name 和 num 位于 type 的最后一行string number显然推断为字
  • 我可以在不安装 Visual Studio 的情况下使用 mstest.exe 吗?

    我想使用 mstest exe 在生成服务器上运行单元测试 但我不想在生成服务器上安装 Visual Studio 我可以只安装 MSTest 而不使用 Visual Studio 吗 无需 Visual Studio 即可运行 mstes
  • PHP:将文档/文本解析为句子

    我正在寻找类似的 PHP 版本 http journals ecs soton ac uk java tutorial intl collat ion textBound html http journals ecs soton ac uk
  • vim:执行编辑器命令列表

    vim 有没有办法给出编辑器命令列表 我想执行一系列 全局 命令 并且这些命令有一些模式 因此 我理想地希望生成命令列表 使用正则表达式搜索和替换 然后运行它们 而不必键入每个命令 谢谢 高拉夫 更新 s buffer register g
  • 是否可以在 Mountain Lion 上当前的 Xcode 4.6.1 工具链中启用 _LIBCPP_DEBUG2?

    这个线程 http comments gmane org gmane comp compilers clang devel 16838是对 clang 的 libc 调试模式的早期讨论 该模式通过定义来启用 LIBCPP DEBUG2在编译
  • 在 R 中添加新行

    我需要在后面添加一个新行 我的数据如下所示 1 60112 486 100 xxx BS 1 1 486 100 yyy TE I need 1 60112 486 100 xxx BS 1 1 486 100 yyy TE 我怎样才能实现
  • 无法达到最佳性能

    我正在努力达到每个人的最佳表现SM从下面的代码 峰值位于 25 GFlops GTX275 GT200 Arch 之间 此代码最多提供 8 GFlops global void new ker float x int index threa
  • 适用于 GAE 的 Python 无头浏览器

    我正在尝试将 Angular js 客户端与 Google Appengine 上的 webapp2 一起使用 为了解决 SEO 问题 我们的想法是使用无头浏览器在服务器端运行 javascript 并将生成的 html 提供给爬虫 有没有
  • 如何覆盖 Nixos configuration.nix 中的 2(两个)包

    我的configuration nix 中有一些需要覆盖的包 所以我写的代码如下 nixpkgs config allowUnfree true packageOverrides pkgs rec mumble pulse audio mu
  • 在 JavaScript 中获取字体规格?

    我目前正在开发一个使用 HTML5 画布作为渲染目标的 JavaScript 项目 为了使我的代码能够很好地与我提供的 严格指定的 接口配合使用 我需要能够获取一种字体并提取该字体的上升和下降高度 这将使客户能够更准确地定位文本 我知道我可
  • 如何去掉多余的双引号?

    在格式错误的 csv 文件中 有一行数据带有额外的双引号 例如最后一行 Name Comment Peter Nice singer Paul Love folk songs 如何删除周围的双引号folk并将字符串替换为 Name Comm
  • 在 3NF 中找到关系,但在 BCNF 中找不到关系

    我一直在阅读许多不同的资料来了解如何区分 3NF BCNF 中的关系 到目前为止 这是我的理解 我将使用这种关系作为例子 R A B C D E and F A gt B B C gt E E D gt A 首先我们必须找到关系的关键 我用
  • 你如何解析悬空的 else ?

    我正在为 C 语言编写一个编译器 我只剩下一个问题需要解决 如何处理悬空的 else 原来的规则是这样的 A gt if 表达式 语句 if 表达式 语句 else 语句 摆脱左递归后 A gt if 表达式 语句 B B gt else
  • 如何有效地比较两个无序列表(而不是集合)?

    a 1 2 3 1 2 3 b 3 2 1 3 2 1 a 和 b 应该被认为是相等的 因为它们具有完全相同的元素 只是顺序不同 问题是 我的实际列表将由对象 我的类实例 组成 而不是整数 O n The 柜台 https docs pyt