python容器之常用操作

以列表list为例,这个list相当于c++中的数组或vector容器。那列表有哪些常用的操作呢?

获取列表的长度

list = [1,2,3,4,5]
//获取列表的长度
length = len(list)

注意这里与c++不同,c++中的容器都是有各自的定义,每种容器类型都实现了自己的获取本容器的长度的方法,这些方法名字一般都是为size(),但是python不一样,对于python中常用的容器他们一般都是利用python提供的内置函数len来获取列表长度的。python中容器一般不是通过size等方法获取容器其元素的个数。(如果是用户自己实现的类,不在讨论的范围之内)

获取列表中某个元素出现的次数

list = [1,2,2,3,4,5]
#统计列表中2出现的次数
number = list.count(2)  

这里获取容器内某个元素出现的次数是通过count方法获取的。count方法是有参数的,参数为元素值。

列表中添加元素

  • 在列表末尾添加一个元素:使用append方法。
  • 两个列表拼接成一个列表:直接相加即可
  • 在列表1中添加一个元素,但是元素是列表2:如果想要将列表2整天加入列表1,使用append方法即可;如果想要将列表2中的内容加入到列表1,而不是将整个列表2作为一个整体加入到列表1,使用extend方法。exntend会把列表打散,将列表中的元素一个一个的加入到列表1汇中;append方法则会将列表2作为一个整体加入到列表1中。
  • 在列表的插入中插入元素的方法:使用insert方法,insert方法要指定索引值和插入值;如果要频繁的在头部插入列表,请使用deque(频繁的在头部插入推荐使用deque)。具体使用方法请看下面的示例。

示例如下:

list = [1,2,3,4,5]#向列表中添加一个元素,添加到末尾
list.append(6)
print(f'list = {list}')  #输出[1,2,3,4,5,6]#两个列表相加
list1 = [6,7,8]
list = list + list1;
print(f'list = {list}')  #输出[1,2,3,4,5,6,7,8]#列表1中使用append方法添加list1
list1 = [6,7,8]
list.append(list1)
print(f'list = {list}')  #输出[1,2,3,4,5,[6,7,8]]#列表1使用extend方法添加list1
list1 = [6,7,8]
list.extend(list1)
print(f'list = {list}')  #输出[1,2,3,4,5,6,7,8]
from collections import deque# 创建deque对象
numbers = deque([1, 2, 3])# 使用appendleft添加元素
numbers.appendleft(0)
print(list(numbers))  # 输出: [0, 1, 2, 3]# 使用extendleft添加多个元素(注意顺序会反转)
numbers.extendleft([-2, -1])
print(list(numbers))  # 输出: [-1, -2, 0, 1, 2, 3]

删除列表中某个位置的元素

删除列表中的某个元素,有几种情况:

  • 知道具体的值,按值进行删除:使用remove方法
  • 知道要删除的索引位置,按位置进行删除:del
  • 知道要删除的索引位置,不但要删除这个值,还要返回要删除的值:pop方法(最常用的方法之一)
  • 删除列表中所有与某个元素相等的值:使用列表推导式和条件表达式批量删除

请看下面的示例:

#pop方法删除元素,如果没有参数,默认删除最后一个元素
#如果有参数,则该参数代表要删除的索引值
list = [1,2,3,4,5]
item = list.pop()
print(f'item={item}')  #item=5
print(f'list={list}')  #list=[1, 2, 3, 4]
second_item = list.pop(1)  #删除列表中索引值为1的元素
print(f'second_item={second_item}')  #item=2
print(f'list={list}')  #list=[1, 3, 4]#remove方法按值删除
list = [1,2,3,4,5]
list.remove(1)
print(f'list={list}')  #list=[2, 3, 4, 5]#安全删除
def safe_remove(list, item):try:list.remove(item)return Trueexcept ValueError:print(f"列表中不存在元素 {item}")return False#按索引位置删除
list = [1,2,3,4,5]
del list[3]
print(f'list={list}')  #list=[1, 2, 3, 5]#批量式删除
list = [1,2,2,2,2,2,3,4,5]
list = [value for value in list if value!=2]  #列表推导式
print(f'list={list}')  #list=list=[1, 3, 4, 5]

获取列表的一部分数据

在python中如果要对指向获取列表的一部分数据,python提供了一种新的形式,即索引和切片,通过这样的方式来获取指定区域的数据。索引值与c++中的一样都是从0开始的,切片需要注意的是左闭右开原则,即包含切片左侧的索引,但是不包括索引右侧的索引。注意切片是可以包含步长的。索引的形式如下:

list左索引值:右索引值]------>左闭右开,即这个切片包括左索引对应的值,但是不包括右索引值

list[:]----->这种表示列表中的所有值

list[:索引值]-------->取这个索引值之前的所有的元素组成的列表

list[索引值:]--------->取从这个元素开始到列表末尾的所有元素

list[索引值:索引值:步长]-------->从左索引值开始到右索引值的前一个元素,每隔步长取元素

list = [1,2,3,4,5,6]
#通过切片的方式获取列表的部分 输出为[2,3,4,5,6]
print(f'list[1:]={list[1:]}') #通过切片的方式获取列表的部分 输出为[2,3]
print(f'list[1:]={list[1:3]}') #通过切片的方式获取列表的部分 输出为[1,2,3]
print(f'list[1:]={list[:3]}')#通过切片的方式获取列表的部分 输出为[1,2,3,4,5,6]
print(f'list[1:]={list[:]}')#通过切片的方式获取列表的部分 输出为[1,3,5]
print(f'list[1:]={list[::2]}')

注意事项

  1. 列表中的元素数据元素可以不相同

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

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

相关文章

工程化与框架系列(11)--Serverless实践

Serverless实践 ☁️ Serverless(无服务器)架构是云计算的一种新范式,它让开发者专注于业务逻辑而无需关心服务器运维。本文将详细介绍前端开发中的Serverless实践方案。 Serverless概述 🌟 💡 小知识:Se…

kan与小波,和不知所云的画图

文章目录 小波应用范围与pde小波的名字 画图图(a):数值解向量 \( u \)图(b):数值解向量 \( v \)结论图4 小波 在你提供的代码中,小波变换(Wavelet Transform)被用于 KANLinear 类中。具体来说,小波变换在 …

算法-二叉树篇22-二叉搜索树的最近公共祖先

二叉搜索树的最近公共祖先 力扣题目链接 题目描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且…

细说STM32F407单片机RS485收发通信实例及调试方法

目录 一、硬件配置 1、RCC、DEBUG、CodeGenerator 2、USART3 3、 RS485_DIR 4、NVIC 二、软件设计 1、RS485的收发控制 2、main.c 三、运行调试 1、修改RS485_DIR为SET后需要延迟 2、向串口助手发送的数据不能太长 MCU上的串口UART(USART)是…

PDF工具 Candy Desktop(安卓)

PDF Candy Desktop(安卓) 今天给大家分享一个电脑端的PDF工具,里面的功能很多,主要涉及PDF编辑、转换等,不仅超级好用,而且免费!剩下就不说了,兄弟们自行下载体验吧! 「…

基于javaweb的SSM+Maven幼儿园管理系统设计和实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

golang安装(1.23.6)

1.切换到安装目录 cd /usr/local 2.下载安装包 wget https://go.dev/dl/go1.23.6.linux-amd64.tar.gz 3.解压安装包 sudo tar -C /usr/local -xzf go1.23.6.linux-amd64.tar.gz 4.配置环境变量 vi /etc/profile export PATH$…

【新手入门】SQL注入之盲注

一、引言 在我们的注入语句被带入数据库查询但却什么都没有返回的情况我们该怎么办? 例如应用程序返回到一个"通用的"的页面,或者重定向一个通用页面(可能为网站首页)。这时,我们之前学习的SQL注入的办法就无法使用了。这种情况我们称之为无…

2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(六级)答案 + 解析

青少年软件编程(Python)等级考试试卷(六级) ↓↓↓↓↓↓ 真题模拟测试 分数:100 题数:38 一、单选题(共25题,共50分) 下面代码的输出结果正确的是?( )import json json_str =’ [ “Alice”, “girl", 17,“New York”]’ data = json.loads(json_str) prin…

wordpress按不同页调用不同的标题3种形式

在WordPress中,可以通过多种方式根据不同的页面调用不同的标题。这通常用于实现SEO优化、自定义页面标题或根据页面类型显示不同的标题内容。 使用wp_title函数 wp_title函数用于在HTML的title标签中输出页面标题。你可以通过修改主题的header.php文件来实现自定义…

DeepSeek-R1 大模型实战:腾讯云 HAI 平台 3 分钟极速部署指南

引言:为什么选择 DeepSeek-R1? 近期,国产大模型 DeepSeek-R1 因其低成本、高性能的特点在全球 AI 领域引发热议。根据 Sensor Tower 数据,其发布仅 18 天便斩获 1600 万次下载量,远超 ChatGPT 同期表现。而腾讯云推出…

【Pytest】setup和teardown的四个级别

文章目录 1.setup和teardown简介2.模块级别的 setup 和 teardown3.函数级别的 setup 和 teardown4.方法级别的 setup 和 teardown5.类级别的 setup 和 teardown 1.setup和teardown简介 在 pytest 中,setup 和 teardown 用于在测试用例执行前后执行一些准备和清理操…

使用Docker将ros1自定义消息通过rosjava_bootstrap生成jar包

文章目录 预准备环境rosjava_bootstrap坏消息好消息 环境安装docker安装rosjava_bootstrap仓库rosjava_center仓库修改rosjava_bootstrap代码拉取docker镜像放置自己的自定义消息 启动docker编译 预准备环境 rosjava_bootstrap rosjava_bootstrap是将自定义的ROS消息生成java…

《Python实战进阶》No 7: 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战

第7集: 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战 在现代 Web 开发中,实时通信已经成为许多应用的核心需求。无论是聊天应用、股票行情推送,还是多人协作工具,WebSocket 都是实现高效实时通信的最佳选择之一。本…

轮式机器人在复杂地形中如何选择合适的全局路径规划算法?

已思考完成 收起 嗯,用户问的是轮式机器人在复杂地形中如何选择合适的全局路径规划算法。首先,我需要理解复杂地形可能带来的挑战,比如崎岖的路面、动态障碍物、非结构化环境等等。轮式机器人在这里的运动控制需要考虑地形通过性、稳定性&…

Mysql100道高频面试题

一、基础概念 1. 什么是数据库?DBMS的作用是什么? 数据库:是按照数据结构来组织、存储和管理数据的仓库。它允许用户高效地访问和管理数据。 DBMS(数据库管理系统):是一种软件系统,用于创建和…

React底层原理详解

React中Element&Fiber对象、WorkInProgress双缓存、Reconcile&Render&Commit、第一次挂载过程详解 在面试中介绍React底层原理时,需遵循逻辑清晰、层次分明、重点突出的原则,结合技术深度与实际应用场景。以下是结构化回答模板:…

qt5的中文乱码问题,QString、QStringLiteral 为 UTF-16 编码

qt5的中文乱码问题一直没有很明确的处理方案。 今天处理进程间通信时,也遇到了qt5乱码问题,一边是设置的GBK,一边设置的是UTF8,单向通信约定采用UTF8。 发送端保证发的是UTF8字符串,因为UTF8在网络数据包中没有字节序…

解锁浏览器内置API,助力跨标签/跨页面数据通信

1 BrodcastChanner 概念 BroadcastChannel接口表示给定源的任何浏览上下文都可以订阅的命名频道。它允许同源的不同浏览器窗口、标签页、frame 或者 iframe 下的不同文档之间相互通信。消息通过message事件进行广播,该事件在侦听该频道的所有BroadcastChannel对象上…

Mysql-如何理解事务?

一、事务是什么东西 有些场景中,某个操作需要多个sql配合完成: 例如: 李四这个月剩下的前不够交房租了,找张三借1000元急用: (1)给张三的账户余额 减去1000元 updata 账户表 set money money -…