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]}')
注意事项
- 列表中的元素数据元素可以不相同
相关文章:
python容器之常用操作
以列表list为例,这个list相当于c中的数组或vector容器。那列表有哪些常用的操作呢? 获取列表的长度 list [1,2,3,4,5] //获取列表的长度 length len(list) 注意这里与c不同,c中的容器都是有各自的定义,每种容器类型都实现了自…...
spring结合mybatis多租户实现单库分表
实现单库分表-水平拆分 思路:student表数据量大,所以将其进行分表处理。一共有三个分表,分别是student0,student1,student2,在新增数据的时候,根据请求头中的meta-tenant参数决定数据存在哪张表…...
YoloV8改进策略:Block改进|CBlock,Transformer式的卷积结构|即插即用
摘要 论文标题: SparseViT: Nonsemantics-Centered, Parameter-Efficient Image Manipulation Localization through Spare-Coding Transformer 论文链接: https://arxiv.org/pdf/2412.14598 官方GitHub: https://github.com/scu-zjz/SparseViT 这段代码出自SparseViT ,代码如…...
微服务架构实践:SpringCloud与Docker容器化部署
## 微服务架构实践:SpringCloud与Docker容器化部署 随着互联网应用的复杂性不断增加,传统的单体应用架构面临着诸多挑战,如难以部署、维护困难、开发效率低下等问题凸显出来。为了解决这些问题,微服务架构应运而生,它通…...
如何从零开始理解LLM训练理论?预训练范式、模型推理与扩容技巧全解析
Part 1:预训练——AI的九年义务教育 📚 想象你往峨眉山猴子面前扔了1000本《五年高考三年模拟》-我那时候还在做的题(海量互联网数据),突然有一天它开口唱起《我在东北玩泥巴》,这有意思的过程就是LLM的预…...
[原创]openwebui解决searxng通过接口请求不成功问题
openwebui 对接 searxng 时 无法查询到联网信息,使用bing搜索,每次返回json是正常的 神秘代码: http://172.30.254.200:8080/search?q北京市天气&formatjson&languagezh&time_range&safesearch0&languagezh&locale…...
8 SpringBootWeb(下):登录效验、异步任务和多线程、SpringBoot中的事务管理@Transactional
文章目录 案例-登录认证1. 登录功能1.1 需求1.2 接口文档1.3 思路分析1.4 功能开发1.5 测试2. 登录校验2.1 问题分析2.2 会话技术2.2.1 会话技术介绍2.2.2 会话跟踪方案2.2.2.1 方案一 - Cookie2.2.2.2 方案二 - Session2.2.2.3 方案三 - 令牌技术2.2.3 JWT令牌(Token)2.2.3.…...
2025年山东省职业院校技能大赛(高职组)“云计算应用”赛项赛卷1
“云计算应用”赛项赛卷1 2025年山东省职业院校技能大赛(高职组)“云计算应用”赛项赛卷1模块一 私有云(30分)任务1 私有云服务搭建(5分)1.1.1 基础环境配置1.1.2 yum源配置1.1.3 配置无秘钥ssh1.1.4 基础安…...
MySQL数据库基本概念
目录 什么是数据库 从软件角度出发 从网络角度出发 MySQL数据库的client端和sever端进程 mysql的client端进程连接sever端进程 mysql配置文件 MySql存储引擎 MySQL的sql语句的分类 数据库 库的操作 创建数据库 不同校验规则对查询的数据的影响 不区分大小写 区…...
塔能科技:工厂智慧照明,从底层科技实现照明系统的智能化控制
在全球节能减碳和智慧生活需求激增的背景下,基于“用软件定义硬件,让物联运维更简捷更节能”的产品理念,塔能科技的智慧照明一体化方案如新星般崛起,引领照明行业新方向。现在,我们来深入探究其背后的创新技术。该方案…...
P3398 仓鼠找 sugar【题解】
这是LCA的一个应用,关于LCA P3398 仓鼠找 sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar 住在地下洞穴中,每个节点的编号为 1 ∼ n 1\sim n 1∼n。地下洞穴是一个树形结构。这一天小仓鼠打算从从他…...
解决VirtualBox - Error In supR3HardenedWinReSpawn报错
问题描述 VirtualBox7.1.6启动虚拟机时报错: Error In supR3HardenedWinReSpawn NtCreateFile(\Device\VBoxDrvStub) failed: 0xc000000034 STATUS_OBJECT_NAME_NOT_FOUND (0 retries) (rc-101) Make sure the kernel module has been loaded successfully.原因分…...
Android Trace埋点beginSection打tag标签,Kotlin
Android Trace埋点beginSection打tag标签,Kotlin import android.os.Bundle import android.os.Trace import android.util.Log import androidx.appcompat.app.AppCompatActivityclass ImageActivity : AppCompatActivity() {companion object {const val TRACE_TA…...
Linux上用C++和GCC开发程序实现两个不同MySQL实例下单个Schema稳定高效的数据迁移到其它MySQL实例
设计一个在Linux上运行的GCC C程序,同时连接三个不同的MySQL实例,其中两个实例中分别有两个Schema的表结构分别与第三实例中两个Schema个结构完全相同,同时复制两个实例中两个Schema里的所有表的数据到第三个实例中两个Schema里,使…...
Lua的table(表)
Lua表的基本概念 Lua中的表(table)是一种多功能数据结构,可以用作数组、字典、集合等。表是Lua中唯一的数据结构机制,其他数据结构如数组、列表、队列等都可以通过表来实现。 表的实现 Lua的表由两部分组成: 数组部分…...
51页精品PPT | 农产品区块链溯源信息化平台整体解决方案
PPT展示了一个基于区块链技术的农产品溯源信息化平台的整体解决方案。它从建设背景和需求分析出发,强调了农产品质量安全溯源的重要性以及国际国内的相关政策要求,指出了食品安全问题在流通环节中的根源。方案提出了全面感知、责任到人、定期考核和追溯反…...
Jenkins 自动打包项目镜像部署到服务器 ---(前端项目)
Jenkins 新增前端项目Job 指定运行的节点 选择部署运行的节点标签,dev标签对应开发环境 节点的远程命令执行配置 jenkins完整流程 配置源码 拉取 Credentials添加 触发远程构建 配置后可以支持远程触发jenkins构建(比如自建的CICD自动化发布平台&…...
使用AoT让.NetFramework4.7.2程序调用.Net8编写的库
1、创建.Net8的库,双击解决方案中的项目,修改如下,启用AoT: <Project Sdk"Microsoft.NET.Sdk"><PropertyGroup><OutputType>Library</OutputType><PublishAot>true</PublishAot>&…...
第49天:Web开发-JavaEE应用SpringBoot栈模版注入ThymeleafFreemarkerVelocity
#知识点 1、安全开发-JavaEE-开发框架-SpringBoot&路由&传参 2、安全开发-JavaEE-模版引擎-Thymeleaf&Freemarker&Velocity 一、开发框架-SpringBoot 参考:https://springdoc.cn/spring-boot/ 访问SpringBoot创建的网站 1、路由映射 RequestMapping…...
学习笔记08——ConcurrentHashMap实现原理及源码解析
1. 概述 为什么需要ConcurrentHashMap? 解决HashMap线程不安全问题:多线程put可能导致死循环(JDK7)、数据覆盖(JDK8) 优化HashTable性能:通过细粒度锁替代全局锁,提高并发度 对比…...
数据集笔记:NUSMods API
1 介绍 NUSMods API 包含用于渲染 NUSMods 的数据。这些数据包括新加坡国立大学(NUS)提供的课程以及课程表的信息,还包括上课地点的详细信息。 可以使用并实验这些数据,它们是从教务处提供的官方 API 中提取的。 该 API 由静态的…...
SpringBoot新闻推荐系统设计与实现
随着信息时代的快速发展,新闻推荐系统成为用户获取个性化内容的重要工具。本文将介绍一个幽络源的基于SpringBoot开发的新闻推荐系统,该系统功能全面,操作简便,能够满足管理员和用户的多种需求。 管理员模块 管理员模块为系统管…...
谷歌推出PaliGemma 2 mix:用于多任务的视觉语言模型,开箱即用。
去年 12 月,谷歌推出了 PaliGemma 2 ,这是Gemma系列中的升级版视觉语言模型。该版本包含不同大小(3B、10B 和 28B 参数)的预训练检查点,可轻松针对各种视觉语言任务和领域进行微调,例如图像分割、短视频字幕…...
深入浅出Spring Boot框架:从入门到精通
引言 在现代软件开发中,Java 语言及其生态系统一直是构建企业级应用的首选之一。Spring Boot 是 Java 社区中最具影响力的项目之一,它继承了 Spring 框架的优点,并通过简化配置和加速开发流程,使得开发者能够更加专注于业务逻辑的…...
Spring Boot spring-boot-maven-plugin 参数配置详解
一 spring-boot-maven-plugin 插件的5个Goals spring-boot:repackage,默认goal。在mvn package之后,再次打包可执行的jar/war,同时保留mvn package生成的jar/war为.origin;重新打包存在的jar或者war包从而使他们可以在命令行使用…...
linux中断调用流程(arm)
文章目录 ARM架构下Linux中断处理全流程解析:从硬件触发到驱动调用 ⚡**一、中断触发与硬件层响应** 🔌**1. 设备触发中断** 📡 **二、CPU阶段:异常入口与上下文处理** 🖥️**1. 异常模式切换** 🔄**2. 跳转…...
考研复试问题总结-数据结构(1)
1. 说一下你对数据结构的理解 我觉得数据结构不仅仅是存数据的“容器”,更是一种思维方式。其实,在我们写程序时,经常会遇到各种各样的数据操作需求,而不同的数据结构能解决问题的效率和方式都不一样,所以选择合适的数…...
250301-OpenWebUI配置DeepSeek-火山方舟+硅基流动+联网搜索+推理显示
A. 最终效果 B. 火山方舟配置(一定要点击添加) C. 硅基流动配置(最好要点击添加,否则会自动弹出所有模型) D. 联网搜索配置 E. 推理过程显示 默认是没有下面的推理过程的显示的 设置步骤: 在Functions函…...
RuoYi框架介绍,以及如何基于Python使用RuoYi框架
若依框架(RuoYi)是一款基于Spring Boot和Vue.js的开源快速开发平台,广泛应用于企业级应用开发。它提供了丰富的功能模块和代码生成工具,帮助开发者快速搭建后台管理系统。 主要特点 前后端分离:前端采用Vue.js&#x…...
【算法】图论 —— Floyd算法 python
洛谷 B3647 【模板】Floyd 题目描述 给出一张由 n n n 个点 m m m 条边组成的无向图。 求出所有点对 ( i , j ) (i,j) (i,j) 之间的最短路径。 输入格式 第一行为两个整数 n , m n,m n,m,分别代表点的个数和边的条数。 接下来 m m m 行,每行三…...
