Python之列表操作和内存模型

news2024/11/24 9:36:14

Python之列表操作和内存模型

列表list

  • 一个排列整齐的队伍,Python采用顺序表实现

  • 列表内的个体称作元素,由若干元素组成

  • 列表 元素可以是任意对象(数字、字符串、对象、列表等)

  • 列表内元素有顺序,可以使用索引

  • 线性的数据结构 使用 [ ] 表示

  • 列表是可变的

      列表是非常重要的数据结构,对其内存结构和操作方法必须烂熟于心。
    

在这里插入图片描述

索引

  • 索引,也叫下标

  • 正索引:从左至右,从0开始,为列表中每一个元素编号

    • 如果列表有元素,索引范围[0, 长度-1]
  • 负索引:从右至左,从-1开始

    • 如果列表有元素,索引范围[-长度, -1]
  • 正、负索引不可以超界,否则引发异常IndexError

  • 为了理解方便,可以认为列表是从左至右排列的,左边是头部,右边是尾部,左边是下界,右边是
    上界

  • 列表通过索引访问,list[index] ,index就是索引,使用中括号访问

      使用索引定位访问元素的时间复杂度为O(1),这是最快的方式,是列表最好的使用方式。
    

查询

  • index(value,[start,[stop]])
    • 通过值value,从指定区间查找列表内的元素是否匹配
    • 匹配第一个就立即返回索引
    • 匹配不到,抛出异常ValueError
  • count(value)
    • 返回列表中匹配value的次数
  • 时间复杂度
    • index和count方法都是O(n)
    • 随着列表数据规模的增大,而效率下降

在这里插入图片描述
在这里插入图片描述

增加单个元素

  • append(object) -> None
    • 列表尾部追加元素,返回None
    • 返回None就意味着没有新的列表产生,就地修改
    • 定位时间复杂度是O(1)
  • insert(index, object) -> None
    • 在指定的索引index处插入元素object
    • 返回None就意味着没有新的列表产生,就地修改
    • 定位时间复杂度是O(1)
  • 索引能超上下界吗?
    • 超越上界,尾部追加
    • 超越下界,头部追加

增加多个元素

  • extend(iteratable) -> None
    • 将可迭代对象的元素追加进来,返回None
    • 就地修改,本列表自身扩展
  • + -> list
    • 连接操作,将两个列表连接起来,产生新的列表,原列表不变
    • 本质上调用的是魔术方法__add__()方法
  • * -> list
    • 重复操作,将本列表元素重复n次,返回新的列表
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

删除

  • remove(value) -> None
    • 从左至右查找第一个匹配value的值,找到就移除该元素,并返回None,否则ValueError
    • 就地修改
  • pop([index]) -> item
    • 不指定索引index,就从列表尾部弹出一个元素
    • 指定索引index,就从索引处弹出一个元素,索引超界抛出IndexError错误
    • 效率?指定索引的的时间复杂度?不指定索引呢?
      • 需要查看弹出的位置,尾部弹效率高,没有影响,头部弹和中间弹都会引起数据挪动。
  • clear() -> None
    • 清除列表所有元素,剩下一个空列表

在这里插入图片描述
在这里插入图片描述

pop() 不给值,缺省值是-1也就是最后一个元素,pop的效率要看从哪弹,从尾部弹肯定效率高,从头部弹就效率不高了因为会发生元素的挪动。

在这里插入图片描述

反转

  • reverse() -> None
    • 将列表元素反转,返回None
    • 就地修改
      这个方法最好不用,可以倒着读取,都不要反转。

排序

  • sort(key=None, reverse=False) -> None
    • 对列表元素进行排序,就地修改,默认升序
    • reverse为True,反转,降序
    • key一个函数,指定key如何排序,lst.sort(key=function)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Spring - Cloud (微服务)

SpringCloud 和 SpringBoot 版本选择对应: 版本对应:https://start.spring.io/actuator/info Cloud官网:Spring Cloud 中文网:Spring Cloud中文网-官方文档中文版 在官网可以查看 当前Cloud 推荐的Boot版本: 当前技术…

Yolov8-pose关键点检测:模型轻量化创新 | 轻量级Slim-Neck

💡💡💡本文解决什么问题:轻量级Slim-Neck,缓解 DSC 缺陷对模型的负面影响,并充分利用深度可分离卷积 DSC 的优势。 Slim-Neck | mAP50从0.921提升至0.93, mAP50从0.697提升至0.829 Yolov8-Pose关键点检测专栏介绍:https://blog.csdn.net/m0_63774211/category_1…

从0到1构建界面设计系统思维

用户界面(UI)是人与机器之间发生交互的载体,也是用户体验(UX)的一个组成部分。用户界面由两个主要部分组成:视觉设计(即传达产品的外观和感觉)和交互设计(即元素的功能和…

超详解| Yolov8模型手把手调参 | 配置 | 模型训练 | 验证 | 推理

YOLOv8是一款前沿、最先进(SOTA)的模型,基于先前YOLO版本的成功,引入了新功能和改进,进一步提升性能和灵活性。 然而,要充分发挥Yolov8的潜力,合理的参数配置是至关重要的。本文将带您深入了解…

2023年值得推荐的 API 开发工具

数字化时代,应用程序编程接口(API)的重要性愈发凸显。API 充当着应用程序之间的桥梁,促进数据交换和功能集成。随着 API 的不断增加和复杂化,开发对 API 开发工具的要求也越来越高。 我们一起来盘点下 2023年上半年比…

Ant design table实现单选和点击行选中

实现单选 Antd table实现单选非常方便只需要在rowSelection属性里添加type: radio即可。 实现点击行选中 需要用到onRow属性 在onClick事件里面手动设置selectRowKey,跟Table onChange事件一样 onRow{(record) > ({onClick: () > {console.log(record)…

极智开发 | vscode使用ssh加速git操作

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文分享一下 vscode使用ssh加速git操作。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq 之前在 vscode 中主要使用 http …

浅析自动化测试工具的功能与作用

自动化测试工具是一种软件工具,旨在通过脚本或可视化界面自动执行测试任务和验证预期结果。这些工具可以自动识别和执行测试用例,模拟用户操作,比较实际和预期结果,并生成测试报告。自动化测试工具减少了人工干预,提高…

蓝桥杯备赛Day7——算法复杂度分析、前缀和思想

O(nlogn)算法可能达到的最优复杂度。快速排序算法是典型例子。 O(n^2)一个两重循环的算法,复杂度是O(n^2)。例如冒泡排序,是典型的两重循环。 O(n^3)、O(n^4)等等。 O(2n)一般对应集合问题。 例如一个集合中有n个数,要求输出它的所有子集。 O(n!)在集合问题中,如果要求按顺…

算法训练营day42|动态规划 part04(01背包问题基础(两种解决方案)、LeetCode 416.分割等和子集)

文章目录 01背包----二维dp数组01背包----滚动数组416.分割等和子集思路分析背包解法思考总结 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最…

Geek——能力超强的卸载工具

简介 Geek是一款能力超强的卸载工具,旨在帮助用户轻松、彻底地卸载不需要的软件。无论是常见的应用程序、插件还是顽固的垃圾文件,Geek都能够迅速而安全地将其清理殆尽,释放您的存储空间和系统资源。 使用Geek,您可以轻松摆脱不…

【100天精通Python】Day56:Python 数据分析_Pandas数据清洗和处理

目录 数据清洗和处理 1.处理缺失值 1.1 删除缺失值: 1.2 填充缺失值: 1.3 插值: 2 数据类型转换 2.1 数据类型转换 2.2 日期和时间的转换: 2.3 分类数据的转换: 2.4 自定义数据类型的转换: 3 数…

2023,软件测试人的未来在哪里?

2023年,IT行业出现空前的萧条,首先是年初一开始各大厂像着了魔似的不约而同的纷纷裁员、降薪、奖金包缩水,随之而来的是需求萎缩,HC减少或封锁等等。 而有幸未被列入裁员名单的在职人员,庆幸之余也心有余悸&#xff0…

Excel VSTO开发8 -相关控件

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 8 相关控件 在VSTO开发中,Ribbon(或称为Ribbon UI)是指Office应用程序中的那个位于顶部的带有选…

it运维监控管理平台,统一运维监控管理平台

随着系统规模的不断扩大和复杂性的提高,IT运维管理的难度也在逐步增加。为了应对这一挑战,IT运维监控管理平台应运而生。本文将详细介绍IT运维监控管理平台的作用和优势以及如何选择合适的平台。 IT运维监控管理平台的作用管理平台 IT运维监控管理平台是…

glb数据介绍

目录 1.什么是glb数据?2.glb数据可以用来干什么?3.glb和gltf有什么区别?4.glb数据怎么打开?5.如何创建glb数据?6.glb数据的结构7.glb数据的优缺点8.glb对pbr渲染的帮助 1.什么是glb数据? GLB文件&#xff0…

Ceph中对象读写请求的顺序性和并发控制

分布式系统中经常需要考虑对象(或者记录、文件、数据块等)的读写顺序以及并发访问问题。通常来说,如果两个对象没有共享的资源,就可以进行并发的访问;如果有共享的部分,就需要对这部分资源进行加锁。而对于同一个对象的…

Sentinel1.8.6集成nacos

代码:https://gitee.com/gsls200808/sentinel-dashboard-nacos jar包:https://gitee.com/gsls200808/sentinel-dashboard-nacos/releases/tag/v1.8.6.0 代码如果看不到可能需要登录。 官方参考文档: 动态规则扩展 alibaba/Sentinel Wiki…

【动态规划——最长公共子串】

动态规划——最长公共子串 题目链接 https://www.nowcoder.com/practice/98dc82c094e043ccb7e0570e5342dd1b?tpId37&tqId21298&rp1&ru/exam/oj/ta&qru/exam/oj/ta&sourceUrl%2Fexam%2Foj%2Fta%3FjudgeStatus%3D3%26page%3D2%26pageSize%3D50%26search%3…

day 49 | 647. 回文子串 ● 516.最长回文子序列

647. 回文子串 dp含义:dp如果是表示i-j的序列中回文子串的个数的话,当新来一个后只能判定出来是整体的回文,内部的无法判断,所以用bool表示整体比较恰当。 递推公式:由于i,j是由i1,j-1决定的,所…