array[::-1] 的时间复杂度和空间复杂度是多少

2024-04-09

当在Python中反转列表时,我通常使用数组[::-1]进行反转,并且我知道更常见的方法可能是从列表的两侧进行交换。但我不确定这两种解决方案之间的区别,例如时间复杂度和空间复杂度。

这两种方法的代码如下:

def reverse(array):
    array[:] = array[::-1]


def reverse(array):
    start, end = 0, len(array)-1
    while start < end:
        array[start], array[end] = array[end], array[start]
        start += 1
        end -= 1

在 C python 中,假设数组是一个列表,则表达式array[::-1]触发函数中找到的以下算法list_subscript()在 源文件listobject.c

result = PyList_New(slicelength);
if (!result) return NULL;

src = self->ob_item;
dest = ((PyListObject *)result)->ob_item;
for (cur = start, i = 0; i < slicelength;
     cur += (size_t)step, i++) {
    it = src[cur];
    Py_INCREF(it);
    dest[i] = it;
}

这段代码的时间复杂度和空间复杂度都是O(n)其中 n 是列表的长度。当然,这并不奇怪。

你的职能reverse()还有O(n)时间复杂度,不同的是它不使用临时列表。

内置的 C 函数比纯 python 循环快得多(在我的计算机上,对于 100 个元素的列表,大约快 10 倍)。

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

array[::-1] 的时间复杂度和空间复杂度是多少 的相关文章

随机推荐

  • 让 GNU C 编译器在 iOS 6.x 上运行

    我有一台越狱 evasi0n 第四代 iPad 带有 iOS 6 1 固件 通过 Cydia 我安装了移动终端 版本 520 2 然后 遵循this http iklive org cc compiling on ios 教程中 我已经下载
  • 子类需要访问抽象超类的私有属性

    我有一个抽象 java 类 它实现了它的几个方法 但没有实现其他方法 在它实现的方法中 它使用私有属性变量 使用的变量也需要在子类中使用 据我所知 我的选择是 在子类和超类中都声明私有变量 将抽象类中当前实现的方法的实现推迟到子类中 还有其
  • PInvoke 'class' 与通过引用传递 'struct'

    当我用谷歌搜索时 我看到帖子说传递 C class与通过相同struct通过引用 即ref SomeStruct name参数 到 C API 同时使用 PInvoke 这是一篇帖子C PInvoke 结构与类访问冲突 https stac
  • jQuery 调用 find 函数在 Firefox 中给出“格式不正确”错误

    我正在从 XML 文件中检索数据 然后使用 jQuery find 函数来访问该数据 但是 在 Firefox 版本 37 0 2 中 我在 JavaScript 控制台中收到以下错误 Error Unable to run script
  • Matplotlib 直方图错位且缺少条形

    我有大量数据文件 因此使用 numpy 直方图 与 matplotlib 中使用的相同 手动生成直方图并更新它们 然而 在绘图时 我感觉图表发生了变化 这是我用来批量手动创建和更新直方图的代码 请注意 所有直方图共享相同的箱 temp np
  • 如何添加管道 |在我的 linux find -exec 命令中?

    这不起作用 这可以在find中完成吗 或者我需要 xargs 吗 find name file follow type f exec zcat agrep dEOE grep 解决方案很简单 通过 sh 执行 exec sh c zcat
  • 需要从c#中的字符串中提取列名

    我正在尝试从 SQL 计算字符串中提取所有列名称 数据保存在数据表的单元格中 并由列周围的方括号确定 我可以提取 的每个实例 但刚刚注意到我有一个问题 有些列具有表名称 有些列具有架构和表名称 例如 列 表 列 或 架构 表 列 我如何修改
  • PostgreSQL:.psql_history 到 /dev/null

    而不是应用一个 set HISTFILE对于每个可能的连接的命令 我们不希望有 psql history根本不 然而 psql 似乎不喜欢这样 ln s dev null psql history psql psql 8 4 8 postg
  • JavaScript 中的二维数组

    对于大学来说 我们有一个关于二维数组的问题需要解决 但是它们的性质从未在课堂上讨论过 我已经在这个网站上搜索答案 这可能在我的代码中很明显 但无法让它工作 甚至无法真正理解正在发生的事情或原因 确切的问题是 Write a program
  • 如何在使用 GDB 遍历代码时禁用 C++ 模板中的单步执行?

    我试图使用 GDB 遍历代码 而 GDB 总是尝试显示 C 模板源代码 这使得调试不方便并且浪费了我很多时间 GDB 尝试介入该函数 当它找不到实现模板的文件时 它会显示错误 或者它会跳转到我不想看到的模板代码 我找不到如何禁用显示 单步进
  • 从“usize”转换为“i32”与其他方式有什么区别?

    我正在创建一个函数 该函数生成一个大小为 n 的随机数数组 但我暂时的比较会引发错误 while ar len as i32 lt size 投诉内容 预计其中之一 lt or gt found 如果我删除as i32它抱怨mismatch
  • Flurry.h 的桥接标头不适用于 Pod

    我有一个现有的桥接头 当前包含多个 obj c pod 我在使用 Xcode 导入 Flurry 框架时遇到问题 Flurry h file not found 即使它已使用 Pod 正确插入 我的桥接标头目前看起来像 import
  • silverlight 文本转语音?

    现在有可用的 silverlight 文本转语音引擎吗 我正在寻找非常简单的文本到语音引擎 需要读出数字 我不想依赖任何网络服务 在最坏的情况下 我会录制一些号码的声音并将它们拼接在一起 任何指点都将受到高度赞赏 我的应用程序不需要在 MA
  • 如何确保在 .NET 中正确处理对象?

    我创建了一个Windows 窗体 http en wikipedia org wiki Windows Forms NET 2 中使用连续运行的 C 的应用程序 对于大多数帐户 我对此感到满意 但有人向我报告 它偶尔会失败 我能够在 50
  • 访问2007到exe

    我在 MS Access 2007 中有一个带有表单的数据库 我需要从访问创建一个独立的 exe 文件 是否可以 如果是这样 怎么办 您不能将其另存为 exe 但您可以使用允许没有访问权限的用户使用您的应用程序
  • 使用 CFExecute 运行 VBScript 会引发错误,但通过命令行可以正常工作

    我正在尝试运行 VBScript 但 CFExecute 抛出错误
  • Django:使用管理上下文扩展基于类的视图的上下文

    我有一个基于类的视图 它只显示配置列表 使用以下代码将此视图添加到 Django 管理站点 admin register ZbxHostConf class ZbxHostConfListViewAdmin admin ModelAdmin
  • MS Graph API:身份验证令牌无效

    我正在尝试使用 Microsoft Graph API 查询 Outlook O365 邮箱中的邮件 我注册我的应用程序 https graph microsoft io en us docs authorization app only在
  • 从 Intellisense 中隐藏(抽象)类

    我有几个抽象类是类库 想从 Intellisense 中隐藏 该怎么做 在类声明之前使用属性 Browsable false EditorBrowsable EditorBrowsableState Never edit 如果类代码在您的解
  • array[::-1] 的时间复杂度和空间复杂度是多少

    当在Python中反转列表时 我通常使用数组 1 进行反转 并且我知道更常见的方法可能是从列表的两侧进行交换 但我不确定这两种解决方案之间的区别 例如时间复杂度和空间复杂度 这两种方法的代码如下 def reverse array arra