Python数组添加元素append的时间复杂度分析

news2024/11/20 11:44:52

由于数组需要连续的存储空间,append()函数的时间复杂度可能为1也可能为n,主要看在后面添加元素时,当前位置是否可以添加,有位置可以添加的话,则直接在后面添加,此时时间复杂度为1,若后面已有其他元素,则需要把整个数组复制到另一个能满足存储条件的位置,此时时间复杂度为n

而插入函数insert()的时间复杂度一般为n,因为是在中间插入

附python插入数据的三个方法比较

一、append()函数操作
append函数将元素追加到列表的尾部,每次只能追加一个元素(元素可以为列表、元组等)。追加元素可以直接写入,append()函数中的元素外加[],表示该元素为数组,会将[]直接写入列表中与后面讲述的extend方法不同。追加多个元素需变成列表形式,将该元素列表写入原列表尾部。示例代码如下:
 

list = [1,2,3]
list.append('a')
#list: [1, 2, 3, 'a']
 
list.append(['a'])
#list: [1, 2, 3, 'a', ['a']]
 
list.append(['b','c'])
#list: [1, 2, 3, 'a', ['a'], ['b', 'c']]

二、extend()函数和'+='运算符
列表的extend()函数也是将元素添加到列表尾部,添加元素与append函数略微区别是添加的[]会被删除。添加元素数组,需要添加2层方括号,添加一层[]时,函数会将数组中元素作为独立元素写入列表中。extend函数与'+='运算符等价。示例代码与上面append书写方式一样,但结果略有不同。
 

list = [1,2,3]
 
list.extend('a')
#list: [1, 2, 3, 'a']
 
list.extend(['a'])
#list: [1, 2, 3, 'a', 'a']
 
list.extend(['b','c'])
#list: [1, 2, 3, 'a', 'a', 'b', 'c']
 
#添加数组需添加2层[]
list.extend([['b','c']])
#list: [1, 2, 3, 'a', 'a','b', 'c', ['b', 'c']]

将示例代码用'+='符号操作一遍,结果与extend函数相同

list = [1,2,3]
list += 'a'
#list: [1, 2, 3, 'a']
 
list += ['a']
#list: [1, 2, 3, 'a', 'a']
 
list += ['b','c']
#list: [1, 2, 3, 'a', 'a', 'b', 'c']
 
#添加数组需添加2层[]
list += [['b','c']]
#list: [1, 2, 3, 'a', 'a', 'b', 'c', ['b', 'c']]

三、insert()函数

list.insert(self,index,object)函数中的index参数表示插入的索引位置,实际插入位置为index参数指示位置的前一个位置。object参数为插入的实参值。insert函数的示例代码:

list = [1,2,3]
list.insert(0,'a')
#list: ['a', 1, 2, 3]
 
list.insert(-1,['b'])
#list: ['a', 1, 2, ['b'], 3]

四、列表生成式错误举例

上文提到的三种方法都是将元素写入原列表,直接应用于列表生成式时无法提取元素会返回None,如果想在列表生成式中对列表末尾添加元素需要使用列表拼接的方式。

#本代码主要实现将单个数字添加到列表尾部,并生成新列表
 
list_1 = ['a','b','c']
new_list = [ list_1.append([i]) for i in range(3)]
#new_list: [None, None, None]
 
#修改后正确代码
list_1 = ['a','b','c']
list_1 = [ list_1+[i] for i in range(3)]
#list_1: [['a', 'b', 'c', 0], ['a', 'b', 'c', 1], ['a', 'b', 'c', 2]]
 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1081378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工学云打卡签到自动完成在异地的问题就解决了|蘑菇钉

工学云打卡助手,能解决你在异地时每天不间断签到的问题,仔细看图哦 1.自动签到 2.自定义打卡地区 3.生成日周月报与总结自动发表 4.支持随机通用内容 5.支持打卡结果推送 对于许多即将步入职场的新人来说,实习是一个非常重要的阶段。实习…

【算法挨揍日记】day13—— DP34 【模板】前缀和、DP35 【模板】二维前缀和

DP34 【模板】前缀和 【模板】前缀和_牛客题霸_牛客网 题目描述: 给定一个长度为n的数组. 接下来有q次查询, 每次查询有两个参数l, r. 对于每个询问, 请输出 输入描述: 第一行包含两个整数n和q.第二行包含n个整数, 表示.接下来q行,每行包含两个整数 l和r. …

聊聊Android签名检测7种核心检测方案详解

聊聊Android签名检测总结与反思 背景: 这篇文章只讲Android端签名检测,安卓发展到现在,因为国内环境没有谷歌市场,所以很多官方推荐的Api没法使用 ,所以国内的签名检测方式也是“千奇百怪” 。发展至今每种方法都有一…

智安网络|揭开云服务的神秘面纱:其含义和功能的综合指南

随着信息技术的不断发展,云服务已经成为了我们生活中的一个不可或缺的部分。无论是在个人生活中还是在商业领域,云服务都具有广泛的应用。 什么是云服务? 云服务是一种基于互联网的计算和存储资源提供方式,它允许用户通过互联网访…

CTF Misc(3)流量分析基础以及原理

前言 流量分析在ctf比赛中也是常见的题目,参赛者通常会收到一个网络数据包的数据集,这些数据包记录了网络通信的内容和细节。参赛者的任务是通过分析这些数据包,识别出有用的信息,例如登录凭据、加密算法、漏洞利用等等 工具安装…

智能优化算法常用指标一键导出为EXCEL,CEC2017函数集最优值,平均值,标准差,最差值,中位数,秩和检验,箱线图...

声明:对于作者的原创代码,禁止转售倒卖,违者必究! 之前出了一篇关于CEC2005函数集的智能算法指标一键统计,然而后台有很多小伙伴在询问其他函数集该怎么调用。今天采用CEC2017函数集为例,进行展示。 为了突…

手动下载/安装Xcode的simulator

目录 前言解决方案1.获取simulator包下载地址1.1 Apple后台1.2 手动 2.使用三方下载工具下载3.使用命令安装simulator 前言 Xcode某个版本更新之后不带iOS的Simulator,导致全新下载一个Xcode后没法编译项目.公司的网又很坑,每次断掉点重试都重新下载,导致完全没法下下来.特别影…

lazada商品列表数据接口,关键词搜索lazada商品数据接口

在网页抓取方面,可以使用 Python、Java 等编程语言编写程序,通过模拟 HTTP 请求,获取lazada网站上的商品页面。在数据提取方面,可以使用正则表达式、XPath 等方式从 HTML 代码中提取出有用的信息。值得注意的是,lazada…

大规模语言模型人类反馈对齐--强化学习

​OpenAI 推出的 ChatGPT 对话模型掀起了新的 AI 热潮, 它面对多种多样的问题对答如流, 似乎已经打破了 机器和人的边界。这一工作的背后是大型语言模型 (Large Language Model,LLM) 生成领域的新训练范式:RLHF (Reinforcement Le…

专题二:二叉树的深搜【递归、搜索、回溯】

深度优先遍历(DFS,全称为DepthFirstTraversal),是我们树或者图这样的数据结构中常用的⼀种遍历算法。这个算法会尽可能深的搜索树或者图的分⽀,直到⼀条路径上的所有节点都被遍历完毕,然后再回溯到上⼀层&a…

为什么要做CRM?

客户管理的痛点: 1、销售经常性漏跟错跟客户,客户转化率低造成资源浪费 2、客户信息繁杂,难整理和查找 3、销售离职带走客户资源,损失大 4、传统报价审批流程长,效率低 企业做CRM系统有以下几点好处: …

纸、纸板和纸制品 有效回收组分的测定

声明 本文是学习GB-T 42944-2023 纸、纸板和纸制品 有效回收组分的测定. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件描述了纸、纸板和纸制品中有效回收组分的测定方法。 本文件适用于各种纸、纸板和纸制品,也适用于铝箔…

Paddle GPU版本需要安装CUDA、CUDNN

完整的教程 深度学习环境配置:linuxwindows系统下的显卡驱动、Anaconda、Pytorch&Paddle、cuda&cudnn的安装与说明 - 知乎这篇文档的内容是尽量将深度学习环境配置(使用GPU)所需要的内容做一些说明,由于笔者只在windows和linux下操作过&#xf…

Zookeeper分布式一致性协议ZAB源码剖析

文章目录 1、ZAB协议介绍2、消息广播 1、ZAB协议介绍 ZAB 协议全称:Zookeeper Atomic Broadcast(Zookeeper 原子广播协议)。 Zookeeper 是一个为分布式应用提供高效且可靠的分布式协调服务。在解决分布式一致性方面,Zookeeper 并…

04_学习springdoc与oauth结合_简述

文章目录 1 前言2 基本结构3 需要做的配置 简述4 需要做的配置 详述4.1 backend-api-gateway 的配置4.1.1 application.yml 4.2 backend-film 的配置4.2.1 pom.xml 引入依赖4.2.2 application.yml 的配置4.2.3 Spring Security 资源服务器的配置类 MyResourceServerConfig4.2.4…

代数——第3章——向量空间

第三章 向量空间(Vector Spaces) fmmer mit den einfachsten Beispielen anfangen. (始终从最简单的例子开始。) ------------------------------David Hilbert 3.1 (R^n)的子空间 我们的向量空间的基础模型(本章主题)是n 维实向量空间 的子空间。我们将在本节讨论它。…

以全新的视角审视重构——世界软件大师“鲍勃大叔”作序推荐

编程不只是写代码,更是一门艺术。编写优雅代码是一种极致追求,这需要一种极客精神才可以达到。高质量的代码不仅可以增加代码可读性,还可以确保所写的代码能够高质量运行和高效维护。 编程也是一门沟通语言,是团队沟通的方式。对代…

计算机毕业设计选题推荐-springboot 企业在线培训系统

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

JUC并发编程(二):线程相关知识点

1.背景 实现编发编程的主要手段就是多线程。线程是操作系统里的一个概念。接下来先说说两者的定义、联系与区别。 1.1 进程和线程的区别 进程 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从…

比特大陆:全员工资停发!昔日的“矿机一哥”遇现金流危机?

近日,一则关于比特大陆暂缓发放9月份全体员工部分工资的消息在网上流传。比特大陆对员工称公司营运现金流尚未转正,尤其是部矿(部署矿机进矿场)进度严重不达标,决定暂缓发放9月份全体员工部分公司,10月7日后视情况发放。 脉脉上多…