Python数据容器详解

文章目录

    • 数据容器
      • list 列表
        • 定义
        • 使用
        • 方法
          • 查找下标
          • 列表修改
          • 插入
          • 追加
          • 删除
          • 修改
          • 查询
          • 循环遍历
      • tuple 元组
        • 定义
        • 操作
      • str 字符串
        • 方法
          • 查找下标
          • 替换
          • 分割
          • 去除前后空格
          • 去除前后指定字符
          • 统计字符串出现次数
          • 统计字符串长度
      • 序列的切片
        • 序列
        • 序列的切片
      • set 集合
        • 定义
        • 方法
          • 添加
          • 移除
          • 随机取出
          • 清空
          • 差集
          • 消除差集
          • 并集
      • dict 字典
        • 定义
        • 访问
          • 方法
      • 总结

数据容器

数据容器是一种可以容纳多份数据的数据类型,容纳的每一份数据称之为一个元素,每一个元素,可以是任意类型的数据,如字符串、数字、布尔等

在Python中有不同的数据容器,他们有不同的特性,分为五类:列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)

list 列表

定义
list_name1 = [name1,name2,name3,...]
list_a = []
list_b = list()

以方括号作为表示,用逗号隔开,元素之间可以是不同的数据类型,支持嵌套,后面两种都是定义空列表的方式

例如

list_name2 = [[1,2,3],[3,4,5]]
使用

数组是利用下标索引进行访问的,有两种标号方式,一种是从左到右,依次标号为0,1,2,…;第二种是从右到左,一次标号为-1,-2,-3,…;

当我们想要进行取出数据时,可以利用方括号+下标的方式取出,例如

list_1 = list_name1[0]
list_2 = list_name2[0][1]
方法

这里的方法其实就类似于函数,但是需要配合数据容器进行使用

查找下标

功能:查找指定元素在列表的下标,如果找不到,报错ValueError

语法:列表.index(元素)

list_name3 = ['name1','name2','name3']
print(list_name3.index('name2'))  # 结果会输出 1
列表修改

功能:修改列表中元素的值

语法:列表[下标] = 值

list_name3[2] = 'name4'
插入

语法:列表.insert(下标, 元素),在指定的下标位置,插入指定的元素

list_name3.insert(2,'name3')
print(list_name3) # 结果 ['name1','name2','name3','name4']
追加

语法:列表.append(元素),将指定元素,追加到列表的尾部

list_name3.append('name5')

语法:列表.extend(其它数据容器),将其它数据容器的内容取出,依次追加到列表尾部

list_name4 = ['name6','name7']
list_name3.append(list_name4)
print(list_name3) # 结果 ['name1','name2','name3','name4''name5','name6','name7']
删除
  1. del 列表[下标]

    del list_name3[6]
    
  2. 列表.pop(下标)

    list_name3.pop(5)
    
修改
  1. 删除第一个匹配的元素 列表.remove(元素)

    list_name3.remove('name5')
    
  2. 清空列表 列表.clear()

    list_name4.clear()
    
  3. 统计某元素在列表内的数量 列表.count(元素)

    list_name3.count('name2')
    
查询

统计列表内,有多少元素

语法:len(列表)

可以得到一个int数字,表示列表内的元素数量

print(len(list_name3)) # 结果是 4

需要注意的是,方法其实非常多,也不需要死记硬背,用的多的自然会记下来,我们只需要知道有这样一个方法即可,要用的时候,只需要查一下

循环遍历
  1. while

    index = 0
    while index < len(列表):元素 = 列表[index]处理idnex += 1
    

    这是列表一个简单的遍历,如果没有理解可以看一下之前流程控制的章节

  2. for

    for 临时变量 in 容器处理
    

    这里与上面不同的是,临时变量可以直接使用,类似于while循环中的元素,也相对便利,了解C++的朋友也可以认为这是简化版的范围for,感兴趣的朋友可以选择性阅读

tuple 元组

列表是可修改的,元组是不可修改的,同样的,也可以包含不同类型的元素

定义

定义元组使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型

tuple1 = (e1,e2,e3,...)
tuple2 = ()
tuple3 = tuple()
tuple4 = (e1,)
tuple5 = (e1)

tuple2和tuple3都是空元组,tuple4是只含一个元素的元组,需要注意的是当元组只有一个数据时,这个数据之后需要添加逗号,否则就不是元组类型,而是他本身的类型

操作

元组由于不可修改的特性,所以其操作方法非常少

方法说明
index()查找元组内数据,存在则返回下标,不存在则报错
count()统计某个元素在元组内出现的次数
len()统计元组内元素的个数

其余的特性除了修改元组内容基本上都和列表一样

str 字符串

对于字符串来说,他只是字符的容器,因此同样也支持下标的访问,他的内容也无法进行修改,我们只能对旧字符串操作之后得到新的字符串,原来的字符串是无法修改的

方法
查找下标

语法:字符串.index(字符串)

str1 = "rick and morty"
print(str1.index("and")) # 结果是5
替换

语法:字符串.replace(字符串1,字符串2)

功能:将字符串内的全部:字符串1,替换为字符串2

注意:不是修改字符串本身,而是得到了一个新字符串

str2 = str1.replace("and","or")
print(str2) # 结果是 rick or morty
分割

语法:字符串.split(分隔符字符串)

功能:按照指定的分隔符字符串,将字符串划分为多个字符串,并存入列表对象中

list1 = str1.split(' ')
print(list1) # 结果是 ['rick','and','morty']
去除前后空格

语法:字符串.strip()

str3 = "  rick and morty  "
str4 = str3.strip()
去除前后指定字符

语法:字符串.strip(字符串)

str5 = "_~rick and morty~_"
str6 = str5.strip("_~")

需要注意的是这里本质上是从传入的两个字符依次比较,删除相同的字符

统计字符串出现次数

语法:字符串.count(字符串)

count1 = str1.count('and')
统计字符串长度

语法:len(字符串)

len1 = len(str1)

序列的切片

序列

序列是指内容连续、有序,可以使用下标引用的一类数据容器,而列表、元组、字符串都是序列

序列的切片

这里切片的含义是从一个序列中取出一个子序列

语法:序列[起始下标:结束下标:步长]

表示从序列中,从指定位置开始,依次取出元素,到指定位置结束,得到一个新序列:

起始下标表示从何处开始,可以留空,留空视作从头开始

结束下标(不含)表示何处结束,可以留空,留空视作截取到结尾

步长表示,依次取元素的间隔

步长1表示,一个个取元素

步长2表示,每次跳过1个元素取

步长N表示,每次跳过N-1个元素取

步长为负数表示,反向取(注意,起始下标和结束下标也要反向标记)

注意:此操作不会影响序列本身,而是会得到一个新的序列

例如

list1 = [1,2,3,4,5]
list2 = list1[1:4] # 从下标1开始取到4结束,前闭后开

这个操作对列表、元组、字符串是通用的

同时非常灵活,根据需求,起始位置,结束位置,步长(正反序)都是可以自行控制的

set 集合

集合的概念类似于数学上集合的定义,具有不重复,无序的特点

那我们其实可以利用这个特点做去重的工作

定义
set1 = {e1,e2,...}
set2 = set()

在定义集合时哪怕e1和e2相同,他也会自动帮你去重

方法

因为集合是无序的,所以集合不支持下标索引访问

添加

语法:集合.add(元素)。将指定元素,添加到集合内

set1 = {'e1','e2'}
set1.add('e3')
移除

语法:集合.remove(元素),将指定元素,从集合内移除

set1.remove('e2')
随机取出

语法:集合.pop(),功能,从集合中随机取出一个元素

elemment = set1.pop()

需要注意的是这个操作之后,集合本身也会被修改,元素被移除

清空

语法:集合.clear(),功能,清空集合

set1.clear()
差集

语法:集合1.difference(集合2)

set3 = set2.difference(set1)

结果是得到一个新集合,集合1和集合2不变

消除差集

语法:集合1.difference_update(集合2)

set1.difference_update(set2)

简单说就是在set1中消除set2中也有的元素

并集

语法:集合1.union(集合2)

set3 = set1.union(set2)

结果会得到新集合,集合1和集合2不变

其余的len()和遍历与其他容器相同

dict 字典

字典实际上就是类似于生活中的字典,是由键值对组成,键是指key,关键字的意思,值是值value

定义

字典的定义,同样使用{},不过存储的元素是一个个的:键值对

例如

dict1 = {key:val,key:val,...}
dict2 = dict()
dict3 = {}
  1. key和value可以是任意类型的数据(key不可为字典)

  2. key不可重复,重复会对原有数据覆盖

访问

字典同样是无序的,无法用下标访问,但是可以利用key来访问

例如

dict1 = {'Summer':17,'Morty':14,'Rick':60}
print(dict1['Morty']) # 结果是14

除此之外,字典是可以嵌套字典(列表等)的,放在value的地方,我们可以以此来理解之后的JSON数据,以后会讲到

方法
方法说明
dict1[‘Jerry’] = 36添加元素,字典被修改
dict1[‘Rick’] = 61更新元素,字典被修改
dict1.pop(‘Jerry’)删除元素
dict1.clear()清空字典
dict1.keys()获取全部的key
for key in dict1.keys()遍历字典

字典不支持下标索引,所以同样不可以用while循环遍历

总结

列表元组字符串集合字典
元素数量支持多个支持多个支持多个支持多个支持多个
元素类型任意任意仅字符任意key : value key:除字典外任意类型 Value:任意类型
下标索引支持支持支持不支持不支持
重复元素支持支持支持不支持不支持
可修改性支持不支持不支持支持支持
数据有序
使用场景可修改、可重复的一批数据记录场景不可修改、可重复的一批数据记录场景一串字符的记录场景不可重复的数据记录场景以key检索value的数据记录场景

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

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

相关文章

单项链表的反转中,不能成功反转

package day5;import java.util.Stack; import java.util.zip.DeflaterOutputStream;/*** Author: monian* Tips: Wo yi wu ta,wei shou shu er!* Date: 2023/12/19 9:33*/ public class ArrayStackDemo3 {public static void main(String[] args) {//测试SingleLinkedStack st…

UE5 Landscape地貌制作 - 学习笔记

P2. 创建地形 https://www.bilibili.com/video/BV1mD4y1D7D6?p2&spm_id_frompageDriver&vd_source707ec8983cc32e6e065d5496a7f79ee6 新建一个Basic场景选择Landscape Mode 生成预览网格&#xff08;绿色网格&#xff09;从文件导入&#xff1a;可以导入dem高度图地貌…

Spring-MVC 源码分析--DispatcherServlet 初始化

文章目录 前言一、DispatcherServlet 概念以及作用&#xff1a;二、请求分发器 HandleMapping &#xff1a;2.1 HandleMapping 的概念及其作用&#xff1a;2.2 HandleMapping 的三种默认实现2.2.1 HandleMapping 实现的时机&#xff1a;2.2.2 RequestMappingHandlerMapping作用…

使用小程序实现App灰度测试的好处

灰度测试&#xff08;Gray Testing&#xff09;是一种软件测试策略&#xff0c;也被称为渐进性测试或部分上线测试。在灰度测试中&#xff0c;新的软件版本或功能并非一次性推送给所有用户&#xff0c;而是仅在一小部分用户中进行测试。这可以帮助开发团队逐步暴露新功能或版本…

Linux Kernel KDB KGDB 实体机内核调试

内核编译配置 CONFIG_DEBUG_INFOy # 编译debug infoCONFIG_MAGIC_SYSRQy # 功能编译开关 CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE0x1 # 默认开启项 默认存在 /proc/sysrq-trigger CONFIG_MAGIC_SYSRQ_SERIALy # 串行sysrq &…

vscode如何开发微信小程序?(保姆级教学)

1.安装“微信小程序开发工具”扩展 2.安装“vscode weapp api”扩展 3.安装“vscode wxml”扩展 4.安装“vscode-wechat”扩展 5.在终端执行命令&#xff1a; vue create -p dcloudio/uni-preset-vue uniapp-test uniapp-test就是我这里的项目名称了 6.如果遇到了这个错误&a…

KBU1010-ASEMI功率整流器件KBU1010

编辑&#xff1a;ll KBU1010-ASEMI功率整流器件KBU1010 型号&#xff1a;KBU1010 品牌&#xff1a;ASEMI 封装&#xff1a;KBU-4 特性&#xff1a;插件、整流桥 最大平均正向电流&#xff1a;10A 最大重复峰值反向电压&#xff1a;1000V 恢复时间&#xff1a;&#xff…

C++多态(2) ——抽象类与final、override关键字

C多态(2) ——抽象类与final、override关键字_c class final-CSDN博客

紫光展锐T820与飞桨完成I级兼容性测试 助推端侧AI融合创新

近日&#xff0c;紫光展锐高性能5G SoC T820与百度飞桨完成I级兼容性测试&#xff08;基于Paddle Lite工具&#xff09;。测试结果显示&#xff0c;双方兼容性表现良好&#xff0c;整体运行稳定。这是紫光展锐加入百度“硬件生态共创计划”后的阶段性成果。 本次I级兼容性测试完…

Vue 条件渲染 v-if

v-if 指令&#xff1a;用于控制元素的显示或隐藏。 执行条件&#xff1a;当条件为 false 时&#xff0c;会将元素从 DOM 中删除。 应用场景&#xff1a;适用于显示隐藏切换频率较低的场景。 语法格式&#xff1a; <div v-if"数据">内容</div> 基础用…

ros2 学习03-开发工具vscode 插件配置

VSCode插件配置 为了便于后续ROS2的开发与调试&#xff0c;我们还可以安装一系列插件&#xff0c;无限扩展VSCode的功能。 中文语言包 Python插件 C插件 CMake插件 vscode-icons ROS插件 Msg Language Support Visual Studio IntelliCode URDF Markdown All in One VSCode支持的…

技术探秘:在RISC Zero中验证FHE——由隐藏到证明:FHE验证的ZK路径(1)

1. 引言 开源代码实现见&#xff1a; https://github.com/hashcloak/fhe_risc0_zkvm&#xff08;Rust&#xff09;https://github.com/weikengchen/vfhe-profiled&#xff08;Rust&#xff09;https://github.com/l2iterative/vfhe0&#xff08;Rust&#xff09; L2IV Resea…

两点云相减并保存结果的C++代码实现

C中实现两个点云相减并保存相减结果&#xff0c;可以使用点云库&#xff08;PCL, Point Cloud Library&#xff09;。代码示例展示了如何进行点云相减&#xff0c;并将结果保存为一个新的点云文件。 这个例子使用了PCL中的pcl::KdTreeFLANN来查找一个点云中的点在另一个点云中…

虚拟磁盘扩容

看了acrn内部的磁盘制作、扩容脚本,学习一下 #!/bin/bash # Copyright (C) 2020-2022 Intel Corporation. # SPDX-License-Identifier: BSD-3-Clausebuild_dir="$PWD/build" cloud_image="${build_dir}/focal-server-cloudimg-amd64.img" cloud_image_ur…

基于AT89C52单片机的计算器设计与仿真

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/88637995?spm1001.2014.3001.5503 源码获取 B 源码仿真图课程设计51 摘 要 计算器一般是指“电子计算器”,能进行数学运算的手持机器&#xff0c;拥有集成电路芯…

整合SpringSecurity

目录 前言 数据库设计 用户表 角色表 用户角色表 权限表 角色权限表 插入数据 表的实体类 用户表实体类 角色表实体类 权限表实体类 mapper层接口 UserMapper RoleMapper AuthorityMapper 封装登录信息 统一响应结果 上下文相关类 jwt令牌工具类 依赖导入…

2023.12.17 关于 Redis 的特性和应用场景

目录 引言 Redis 特性 内存中存储数据 可编程性 可扩展性 持久化 支持集群 高可用性 Redis 优势 Redis 用作数据库 Redis 相较于 MySQL 优势 Redis 相较于 MySQL 劣势 Redis 用作缓存 典型场景 Redis 存储 session 信息 Redis 用作消息队列 初心 消息队列的…

Skywalking系列之最新版9.2.0-JavaAgent本地构建

MAC 10.15.7IDEA 2021.2skywalking-agent 9.2.0-SNAPSHOTJDK 17/21 (最新的代码要看最新的要求&#xff0c;注意不能使用JDK8&#xff0c;会构建失败)Maven 3.6.0 关于本地构建JavaAgent源码 1、获取源码&#xff0c;加载submodule 分步执行&#xff1a; git clone https:/…

智能优化算法应用:基于适应度相关算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于适应度相关算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于适应度相关算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.适应度相关算法4.实验参数设定5.算法…

构建高效统一的音视频联动融合通信调度平台

在信息技术日益高度发展的今天&#xff0c;越来越多的企业或者组织机构重视如何提高内外部的工作效率&#xff0c;但由于传统的通信方式如电话、邮件、短信、传真等方式无法满足企业高效、快速的沟通要求&#xff0c;因此需要一个可以将各种通信方式结合在一起的通信系统来满足…