python学习笔记----数据容器(六)

news2025/1/14 1:22:16

一、数据容器的入门

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

数据容器根据特点的不同,如:

  • 是否支持重复元素
  • 是否可以修改
  • 是否有序,等

分为5类,分别是:

  • 列表(list)
  • 元组(tuple)
  • 字符串(str)
  • 集合(set)
  • 字典(dict)


二、列表(list)

2.1 列表的定义

语法:

# 字面量
[元素1, 元素2, 元素3, 元素4, ...]

# 定义变量
变量名 = [元素1, 元素2, 元素3, 元素4, ...]

# 定义空列表
变量名 = []
变量名 = list()

列表内的每一个数据,称之为元素

示例:

# 定义一个列表 list
my_list = ["zhangsan", "lisi", "wangwu"]
print(my_list)

my_list = ["zhangsan", 666, True]
print(my_list)

# 定义一个嵌套列表
my_list = [[1, 2, 3], [4, 5, 6]]
print(my_list)
  • 元素的数据类型没有任何限制,甚至元素也可以是列表

2.2 列表的下标索引

  • 列表的一个重要特性是能够通过下标索引(也称为数组索引)来访问、修改或操作它的元素。
    在这里插入图片描述
  • 反向索引
    在这里插入图片描述

示例

假设有一个列表如下:

my_list = ['apple', 'banana', 'cherry', 'date']
  • 访问元素:
print(my_list[0])   # 输出 'apple'
print(my_list[3])   # 输出 'date'
print(my_list[-1])  # 输出 'date'(使用反向索引)
  • 索引越界:
print(my_list[4])  # IndexError: list index out of range


2.3 嵌套列表的下标索引

nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

这个例子可以看作是一个 3x3 的矩阵:

第一行是 [1, 2, 3]
第二行是 [4, 5, 6]
第三行是 [7, 8, 9]

  • 访问第一行:
first_row = nested_list[0]
print(first_row)  # 输出: [1, 2, 3]
  • 访问第一行的第一个元素
first_item = nested_list[0][0]
print(first_item)  # 输出: 1
  • 访问第三行的第三个元素:
last_item = nested_list[2][2]
print(last_item)  # 输出: 9




2.4 列表的常用操作(方法)

列表除了可以:

  • 定义
  • 使用下标索引

列表也提供了一系列功能:

  • 插入元素
  • 删除元素
  • 清空列表
  • 修改元素
  • 统计元素个数等

这些功能我们都称之为:列表的方法

在这里插入图片描述



查询某元素的下标

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

语法:列表.index(元素)

示例:

my_list = ["zhangsan", "lisi", "wangwu"]

index = my_list.index("zhangsan")
print(index)


修改特定位置(索引)的元素值:

语法:列表[下标] = 值

示例:

my_list = ["zhangsan", "lisi", "wangwu"]

my_list[0] = "张三"
print(my_list)

插入元素

  • 在指定的下标位置,插入元素

语法:列表.insert(下标, 元素)

示例

my_list = ["zhangsan", "lisi", "wangwu"]

my_list.insert(1,"apple")
print(my_list)

追加元素

  • 将元素追加到列表的尾部

语法:列表.append(元素)

示例:

my_list = ["zhangsan", "lisi", "wangwu"]

my_list.append("apple")
print(my_list)

追加元素2

  • 追加多个元素到列表尾部

语法:列表.extend(其他数据容器)

示例:

my_list = ["zhangsan", "lisi", "wangwu"]

my_list.extend(["apple", "banana","pear"])
print(my_list)

删除元素

语法1:del 列表[下标]

示例:

my_list = ["zhangsan", "lisi", "wangwu"]

del my_list[0]
print(my_list)

语法2:列表.pop(下标)

  • pop可以删除列表中指定位置的元素,并返回被删除的元素

示例:

my_list = ["zhangsan", "lisi", "wangwu"]

element = my_list.pop(0)
print(my_list)
print(element)


删除某元素在列表中的第一个匹配项

语法:列表.remove(元素)

示例:

my_list = ["zhangsan", "lisi", "wangwu", "zhangsan"]

my_list.remove("zhangsan") #从前往后搜索,删除第一个匹配项
print(my_list)


清空列表

语法:列表.clear()

示例:

my_list = ["zhangsan", "lisi", "wangwu", "zhangsan"]

my_list.clear()
print(my_list)


统计某元素在列表内的数量

语法: 列表.count(元素)

示例:

my_list = ["zhangsan", "lisi", "wangwu", "zhangsan"]

count = my_list.count("zhangsan")
print(count)


统计列表内,有多少元素

语法: len(列表)

示例:

my_list = ["zhangsan", "lisi", "wangwu", "zhangsan"]

count = len(my_list)
print(count)




三、tuple(元组)

元组同列表一样,都是可以封装多个、不同类型的元素在内。
但最大的不同点在于:

  • 元组一旦定义完成,就不可修改

3.1 元组的定义语法

# 定义元组字面量
(元素, 元素, ..., 元素)
# 定义元组变量
变量名 = (元素, 元素, ..., 元素)
# 定义空元组
变量名 = ()        # 方式1
变量名 = tuple ()  # 方式2
  • 和list基本相同(有序,任意数量元素,允许重复元素),唯一不同在于不可修改
    在这里插入图片描述


四、str(字符串)

4.1 字符串的下标(索引)

和列表、元组一样,字符串也可以通过下标进行访问

  • 从前向后,下标从0开始
  • 从后向前,下标从-1开始

示例:

my_str = "zhang san"
value1 = my_str[2]
value2 = my_str[-7]
print(value1)
print(value2)

同元组一样,字符串是一个:无法修改的容器

在这里插入图片描述



五、(序列)的切片

序列是指:内容连续、有序、可使用下表索引的一类数据容器

  • 列表、元组、字符串,均可视为序列。
    在这里插入图片描述

5.1 序列的常用操作- 切片

  • 序列支持切片,即:列表、元组、字符串,均支持进行切片操作
  • 切换:从一个序列中,取出一个子序列

语法:序列[起始下标:结束下标:步长]
表示从序列中,从指定位置开始,依次取出元素,到指定位置结束,得到一个新序列:

  • 起始下标表示从何处开始,可以留空,留空视作从头开始
  • 结束下标(不含)表示何处结束,可以留空,留空视作截取到结尾
  • 步长表示,依次取元素的间隔
    - 步长1表示,一个个取元素
    - 步长2表示,每次跳过1个元素取
    - 步长N表示,每次跳过N-1个元素取
    - 步长为负数表示,反向取(注意,起始小标和节数下标也要反向标记)

示例:

# 对list进行切片,从1开始,4结束,步长1
my_list = [0, 1, 2, 3, 4, 5, 6]
result1 = my_list[1:4]  # 步长默认是1,可以省略不写
print(result1)

# 对tuple进行切片,从头开始,到最后结束,步长1
my_tuple = (0, 1, 2, 3, 4, 5, 6)
result2 = my_tuple[:]     # 起始和结束不写表示从头到尾,步长为1可以省略
print(result2)

# 对str进行切片,从头开始,到最后结束,步长2
my_str = "01234567"
result3 = my_str[::2]
print(result3)

# 对str进行切片,从头开始,到最后结束,步长-1
my_str = "01234567"
result4 = my_str[::-1]  # 等同于将序列反转了
print(result4)

# 对列表进行切片,从3开始,到1结束,步长-1
my_list = [0, 1, 2, 3, 4, 5, 6]
result5 = my_list[3:1:-1]
print(result5)

# 对元组进行切片,从头开始,到尾结束,步长-2
my_tuple = (0, 1, 2, 3, 4, 5, 6)
result6 = my_tuple[::-2]
print(result6)



六、set(集合)

集合最主要的特点是:不支持元素的重复(自带去重功能)、并且内容无序

语法:

# 定义集合字面量
{元素, 元素, ..., 元素}

# 定义集合变量
变量名 = {元素, 元素, ..., 元素}

# 定义空集合
变量名 = set()

6.1 集合常用操作

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

6.1.1 添加新元素

语法:集合.add(元素)

my_set = {"zhangsan", "lisi", "wangwu"}

my_set.add("apple")
print(my_set)

6.1.2 移除元素

语法:集合.remove(元素)

示例:

my_set = {"zhangsan", "lisi", "wangwu"}

my_set.remove("zhangsan")
print(my_set)

6.1.3 从集合中随机取出元素

  • 从集合中随机取出元素,同时集合本身被修改,元素被移除
    语法: 集合.pop()

示例:

my_set = {"zhangsan", "lisi", "wangwu"}

element = my_set.pop()
print(element)  # lisi
print(my_set)   # {'zhangsan', 'wangwu'}

6.1.4 取出两个集合的差集

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

  • 功能:取出集合1和集合2的差集(集合1有而集合2没有的)
  • 结果:得到一个新集合,集合1和集合2不变

示例:

set1 = {1, 2, 3}
set2 = {1, 5, 6}
set3 = set1.difference(set2)
print(set3)     # {2, 3}
print(set1)     # {1, 2, 3}
print(set2)     # {1, 2, 3}

6.1.5 消除两个集合的差集

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

  • 功能:对比集合1和集合2,在集合1内,删除和集合2相同的元素
  • 结果:集合1被修改,集合2不变

示例:

set1 = {1, 2, 3}
set2 = {1, 5, 6}
set1.difference_update(set2)

print(set1)     # {2, 3}
print(set2)     # {1, 5, 6}

6.1.6 两个集合合并

语法: 集合1.union(集合2)
功能:将集合1和集合2组合成新集合
结果:得到新集合,集合1和集合2不变

set1 = {1, 2, 3}
set2 = {1, 5, 6}

set3 = set1.union(set2)
print(set3)     # {1, 2, 3, 5, 6}
print(set1)     # {1, 2, 3}
print(set2)     # {1, 5, 6}

6.1.7 集合的遍历

  • 集合不支持下表索引,所以不能用while循环
  • 可以用for循环遍历
set1 = {1, 2, 3, 5, 6}

for element in set1:
    print(f"集合的元素有:{element}")

在这里插入图片描述



七、dict(字典、映射)

7.1 字典的定义

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

# 定义字典字面量
{key:value, key:value, ..., key:value}

# 定义字典变量
my_dict = {key:value, key:value, ..., key:value}

# 定义空字典
my_dict = {}     # 方式1 
my_dict = dict() # 方式2
  • 键(key)必须是唯一的。如果你尝试在字典中使用重复的键定义或添加元素,那么新的值将覆盖原有键对应的值。字典内的每个键只能关联一个值,因此重复的键不会导致错误,而是更新已存在的键对应的值。

示例:

# 定义字典
my_dict1 = {"张三": 100, "李四": 60, "王五": 80}

# 定义空字典
my_dict2 = {}
my_dict3 = dict()

# 定义重复key的字典
my_dict4 = {"张三": 100,"张三": 99, "李四": 60, "王五": 80}
print(my_dict1)     # {'张三': 99, '李四': 60, '王五': 80}

7.2 字典数据的获取

  • 字典同集合一样,不可以使用下表索引
  • 但是字典可以通过key值来取得对应的value
    语法:字典[key]

示例:

my_dict1 = {"张三": 100, "李四": 60, "王五": 80}

print(my_dict1["张三"])   # 100
print(my_dict1["李四"])   # 60
print(my_dict1["王五"])   # 80


7.3 字典的嵌套

stu_score_dict = {
    "张三": {"语文": 77, "数学": 66, "英语": 88},
    "李四": {"语文": 20, "数学": 30, "英语": 40},
    "王五": {"语文": 30, "数学": 40, "英语": 60},
}
print(f"学生考试信息是:{stu_score_dict}")

# 从嵌套字典中获取数据
# 查看张三的语文成绩
print(stu_score_dict["张三"]["语文"])



7.4 字典的常用操作

在这里插入图片描述

八、数据容器的特点对比

在这里插入图片描述

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

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

相关文章

JAVA自定义日期选择器

下载jar地址, https://toedter.com/jcalendar/ jar包下载地址 依赖包如下图所示: 整个项目代码已经上传到CSDN https://download.csdn.net/download/qq_30273575/89241601?ydrefereraHR0cHM6Ly9tcC5jc2RuLm5ldC9tcF9kb3dubG9hZC9tYW5hZ2UvZG93bmxvYWQ…

由异常的测试眼图引发的深入思考

最近的信号测试中,出现了“双眼皮”的眼图测试效果,直觉告诉我,这肯定是有问题的,于是,脑海中就出现了很多的场景假设,并将可能的导致因素总结如下: 1. PCB通道阻抗设计不匹配,负载端…

Windows 本地直接使用 SSH,SFTP 以及 SFTP下载文件到 Windows/mac 本地或上传(没有客户端时)

windows 本地打开 ssh 以及 sftp 等的方式 1.win(windows图标那个键) r 直接搜 然后从打开的位置运行 如果是打开 sftp 前面的 ssh 换一下成sftp 就行 直接从地址栏输入也可以直接转过去 通过 windows 的工具直接访问 sftp 后将文件下载到自己的windows 或 mac 上 先通过…

Pandas 2.2 中文官方教程和指南(二十五·一)

原文:pandas.pydata.org/docs/ 食谱 原文:pandas.pydata.org/docs/user_guide/cookbook.html 这是一个简短而精炼的示例和链接存储库,包含有用的 pandas 示例。我们鼓励用户为此文档添加内容。 在这一部分添加有趣的链接和/或内联示例是一个…

《Spring-MVC》系列文章目录

简介 Spring MVC是一种基于Java的实现MVC设计模式的请求驱动类型的轻量级Web框架,它通过把Model(模型)、View(视图)、Controller(控制器)分离,将web层进行职责解耦,把复杂…

计算机视觉大项目(1)-水果分级系统

项目来源:河北大学计算机视觉课程-杨老师. 一共有四个标题,本篇博客只完成前两问。 目录 实验目的: 实验内容: 实验步骤: 1.水果图像的分割 >掩膜图像Mask 是什么? >改进:去除反光部分的影响 2&#xf…

打造智能化且用户体验上乘的企业展馆需关注哪些细节?

随着科技的进步,传统展馆的设计理念和展陈方式已逐渐暴露出不足,为了让企业展馆在新时代焕发出更加璀璨的光彩,我们亟待在展馆的创新设计、智能化展示以及人性化布局等多个层面进行深入探索。那么,究竟需要精心打磨哪些细节&#…

【网站项目】家庭理财系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

(css)鼠标移出样式不变

(css)鼠标移出样式不变 需求&#xff1a;列表鼠标移入切换样式&#xff0c;移出保持不变 <divv-for"(item, index) of newsList":key"index"class"news-list":class"{active : change index}"tabindex"1"mouseenter&quo…

Webshell绕过技巧分析之-base64编码和压缩编码

在网络安全运营&#xff0c;护网HVV&#xff0c;重保等活动的过程中&#xff0c;webshell是一个无法绕过的话题。通常出现的webshell都不是以明文的形式出现&#xff0c;而是针对webshell关键的内容进行&#xff0c;混淆&#xff0c;编码来绕过网络安全产品&#xff0c;例如IDS…

好用到哭的AI工具,你知道几个?

随着人工智能技术的不断发展&#xff0c;越来越多的AI工具被广泛应用到我们的日常生活和工作中&#xff0c;给人们带来了极大的便利。本文将探讨人们在使用AI工具时&#xff0c;最喜欢的和认为最好用的工具是哪些&#xff0c;并展示AI技术的实际应用和影响。 让我们关注一下AI…

聊聊Mysql的两阶段提交

从图中可看出&#xff0c;事务的提交过程有两个阶段&#xff0c;就是将 redo log 的写入拆成了两个步骤&#xff1a;prepare 和 commit&#xff0c;中间再穿插写入bin log&#xff0c;具体如下&#xff1a; prepare 阶段&#xff1a;将 事务的修改写入到 redo log&#xff0c;同…

SpringBoot之自定义注解参数校验

SpringBoot之自定义注解参数校验 为什么要自定义注解 我这里先引入一个例子&#xff0c;就比如我现在要写文章&#xff0c;文章也许写完正要发布&#xff0c;也可以是还没写完正要存草稿&#xff0c;前端往后端发送数据&#xff0c;如果前端的state不是草稿或者已发布状态&…

HTML:认识HTML及基本语法

目录 1. HTML介绍 2. 关于软件选择和安装 3. HTML的基本语法 1. HTML介绍 HyperText Markup Language 简称HTML&#xff0c;意为&#xff1a;超文本标记语言 超文本&#xff1a;是指页面内可以包含的图片&#xff0c;链接&#xff0c;声音&#xff0c;视频等内容 标记&am…

【开发者好用插件】基于百度文心大模型,前端,后端,开发者的辅助神器

基于百度文心大模型&#xff0c;前端&#xff0c;后端&#xff0c;开发者的辅助神器&#xff0c;百度AI代码生成器&#xff0c;个人用户免费&#xff0c;可以提问&#xff0c;写注释&#xff0c;等等&#xff0c;新手必备神器啊 智能代码助手&#xff08;Baidu Comate&#xf…

【每周精选资讯 | 第 7 期】2024-04-22 ~ 2024-04-28

目录 前言生数科技与清华联合推出视频大模型Vidu性能媲美Llama3&#xff0c;阿里巴巴通义千问开源 Qwen1.5-110B 模型黄仁勋亲自向OpenAI交付DGX H200GitLab 发布人工智能编程助手 Duo Chat商汤升级“日日新5.0”大模型&#xff0c;对标GPT-4Turbo阿里发布职业趋势报告&#xf…

中伟视界:矿山智能管控平台关键功能介绍,AI算法、告警通知、问题解决

矿山智能管控平台的关键功能介绍如下&#xff1a; 1.1. 主界面功能介绍 主界面分为六大区域&#xff0c;分别是设备列表、重点区域、功能区、告警列表、菜单区等&#xff0c;分别对应不同的功能和操作。 1.2. 平台功能 平台包含11条特色功能&#xff0c;分别为&#xff1a…

免费通配符证书申请

通配符证书是一种 SSL/TLS 证书&#xff0c;可用于保护多个域&#xff08;主机&#xff09;&#xff0c;由域名字段中的通配符 (*) 指示。 如果您有很多需要保护的域或子域&#xff0c;这会很有帮助&#xff0c;因为它可以节省您的时间和金钱。 本文将讨论通配符证书、它们的工…

ENVI下基于劈窗算法从MODIS数据中反演海表温度

劈窗算法最初是为反演海面温度开发的&#xff0c;具体地说是针对NOAA/AVHRR的4和5通道设计的&#xff0c;后来也被用来反演地表温度&#xff0c;这种算法较成熟&#xff0c;精度也高。劈窗算法以地表热辐射传导方程为基础&#xff0c;利用10~13μm 大气窗口内&#xff0c;两个相…

Ubuntu 24.04安装搜狗输入法-解决闪屏问题

问题描述 在Ubuntu 24.04 LTS系统中按照官方安装指导《Ubuntu20.04安装搜狗输入法步骤》安装搜狗输入法后&#xff1a; 会出现屏幕闪烁&#xff0c;无法正常使用的问题&#xff1b;系统搜索框和gnome-text-editor无法使用搜狗输入法&#xff1b; 原因分析 闪屏可能是Ubuntu…