从C到Py:Python的组合数据类型

这一部分开始,我们将讲解Python中的组合数据类型,这里的知识十分基础而且重要,也已经与C语言的框架愈差愈远。

目录

序列和索引

1、概念

2、切片操作

3、序列的其他操作

列表

1、概念

2、创建与删除

3、列表的操作

4、列表生成式

5、二维列表

元组

1、概念

2、创建与删除

3、元组的操作

4、元组生成式

5、元组和列表的区别

字典

1、概念

2、创建与删除

3、取值与遍历

 4、相关操作

5、字典生成式

集合

1、概念

2、创建

3、集合的操作

4、集合生成式

Python 3.11 新特性

1、结构模式匹配

2、字典合并运算符

3、同步迭代


序列和索引

1、概念

序列是一个用于储存多个值的连续空间,每个值对应着一个整数编号,被称为索引

索引又被分为正向递增索引:0、1、2、......、n-1 和反向递减索引:-n、-n+1、……、-1

我们可以简单地理解为C语言中的数列,当然它实际的意义十分宽广。以下展示一份代码:

s='helloworld'
for i in range(1, len(s)):print(i, s[i], end='\t\t')# 输出结果:1 e		2 l		3 l		4 o		5 w		6 o		7 r		8 l		9 d

s[i]就是使用了索引,这里还新用到了一个len()函数,它可以返回序列的长度。我们以下要提到的列表、元组、字典和集合,事实上都是序列。

2、切片操作

序列的切片操作是根据索引截取部分序列,其语法结构为:

序列[start:end:step]

start:开始索引(包含),默认从0开始

end:结束索引(不包含),默认到结尾(此时包含最后一个元素)

step:步长(默认为1)

例如切片 序列[0:5:2] 就是从第1个元素开始到第6个元素,步长为2地取出了3个元素。

3、序列的其他操作

相加:s1+s2 直接拼接成新序列;

相乘:s*n 将s赋值n遍;

x in s :若x为s的元素,结果为True,否则结果为False;

x not in s:若x不是s的元素,结果为True,否则结果为False;

len(s):序列s中元素的个数

max(s):序列s中元素的最大值 (对字符的值要看ASCII码)

min(s):序列s中元素的最小值

s.index(x):序列s中第一次出现元素x的位置 (返回的是索引)

s.count(x):序列s中出现x的总次数

很显然,Python中有关序列的内置函数提供十分方便的操作方法,这是初学C语言时所没有的。

列表

1、概念

列表是一列按特定顺序排列的元素,属于可变序列。使用 [ ] 定义,元素之间用 “ , ”(逗号) 分隔。

2、创建与删除

列表的创建有两种方法

①:列表名=[element1,element2,...]

②:列表名=list()

列表的删除

del 列表名

3、列表的操作

①:序列的操作均可以对列表使用

②:enumerate函数

这个函数的作用是索引列表,语法格式为:

for index, item in enumerate(lst):

        语句块

其中的index是序号,item是元素,这样做可以同时历边列表的序号及对应的1元素,在语句块中即可进行输出等操作。

③:特有操作

lst.append():在列表的最后增加一个元素

lst.insert(index,x):在列表的第index位置增加元素x

lst.clear():清除列表中的所有元素

lst.pop(index):删除第index位置的元素

lst.remove(x):将出现的第一个元素x删除

lst.reverse(x):将列表中的元素反转

lst.copy():拷贝列表中的所有元素,生成一个新列表

列表的排序操作:

lst.sort(key=None, reverse=False)

参数key为排序规则,reverse为排序方式,默认为升序,True为降序。

也可以使用sorted()函数,这将生成一个新的对象

sorted(iterable, key=None, reverse=False)

参数sorted为排序对象

4、列表生成式

即创建列表的语法:

①:lst=[expression for item in range]

②:lst=[expression for item in range if condition] 这是带条件的版本

我们用部分简单的代码演示:

lst=[item*item for item in range(1, 11)]
print(lst)
# 这是1到10的平方
lst=[i for i in range(10) if i%2==0]
print(lst)
# 结果为0到10之间的偶数

5、二维列表

实际上就是元素为列表的列表,我们完全可以将C语言中有关二维数组的知识迁移过来。

历边二维列表的格式:

for row in 二维列表:  

        for item in row:    

                pass

下例是用生成式生成4行5列的二维列表

lst=[[j for j in range(5)] for i in range(4)]

元组

1、概念

下面介绍另一种序列类型:元组。

元组属于不可变序列。用 ( ) 定义,元素间用 “ , ” 分隔。

值得指出的是,元组中只有一个元素时,逗号也不能省略

2、创建与删除

元组的创建有两种方法:

①:元组名=(~, ~, ..., )

②:元组名=tuple()

删除:

del 元组名

3、元组的操作

①:对序列的基本操作都可以在元组上使用

②:访问与遍历

使用 [ ] 来索引,且支持切片操作,如  [0:3:2]。

4、元组生成式

t=(expression for item in range)

生成的结果是生成器对象。

5、元组和列表的区别

相较于列表来说,元组不可添加、删除、修改元素等。

元组访问处理的速度较快,可以作为字典中的键。

字典

1、概念

序列类型字典的元素,是按根据一个信息查找另一个信息的方式构成了“键值对”,表示索引用的键和对应的值构成的成对关系。

字典是可变数据类型,是无序的。

2、创建与删除

d={key1:value1, key2:value2,......}

②用内置函数创建

(1)zip(lst1, lst2) 将两个列表一一对应,其中前者为键。代码演示:

lst1=[1,2,3,4]
lst2=['a','b','c','d']
zipobj=zip(lst1,lst2)
print(zipobj)

(2) d=dict(key1=value1, .......)

d=dict(cat=10,dog=20)
print(d)
# 输出结果:{'cat': 10, 'dog': 20}

这是直接传参进行创建的方法,参数中等号之前的元素是键

如果两个元素的key相同,value会被覆盖为位置靠后的一方

元组也可以作为键,可变数据类型不可以作为键

③删除 del   简单来说,都是用del进行删除。

3、取值与遍历

取出字典中某一项的value:d[key] 或者 d.get(key)

字典的遍历既可以遍历每一对对应关系,也可以同时遍历键和值:

①:for element in d.items():

        pass

②:for key, value in d.items():

        pass

d={'a': 1, 'b': 2, 'c': 3}for item in d.items():print(item)
#结果为:
#('a', 1)
#('b', 2)
#('c', 3)
for key, value in d.items():print(key, value)
#结果为:
#a 1
#b 2
#c 3

 4、相关操作

d.keys()  获取所有的key

d.values() 获取所有的value

d.pop(key, default)  如果key存在就获取value,并删除key-value对,否则获取默认值

d.popitem()  随机获取一个key-value对,结果为元组类型,并且删除该key-value对

d.clear()  清空字典中所有的key-value对

5、字典生成式

d={key:value for item in range}

d={key:value for key, value in zip(lst1, lst2)}

集合

1、概念

实际上这里的序列类型集合的概念,与数学中的集合的概念是一致的。集合是无序、不重复的元素序列。

集合中只能储存不可变数据类型(比如整数,但列表不行)

集合使用 { } 定义;集合是可变数据类型

2、创建

一定要使用set()函数创建集合,直接用{}创建得到的是字典

s=set('helloworld')
print(s)
# 结果为:{'w', 'e', 'l', 'h', 'o', 'r', 'd'}

3、集合的操作

①:操作符

&、并 |、差 -、 补 ^。概念与数学中的定义相同,下面是一段代码演示:

A={10,20,30,40,50}
B={10,20,40,80}
print(A&B)
print(A|B)
print(A-B)
print(A^B)

②:

s.add(x):若x不在s中,则将x添加到集合s

s.remove(x):x在集合中,将其删除;不在,则报错

s.clear():清楚集合中所有元素

4、集合生成式

其实生成式的格式真没有什么差别,下面是两种写法:

s={i for i in range(1,10)}

s={i for i in range(1,10) if i%2==1}

讲解完了这几种类型,我们可以做个简单的总结:

数据类型序列类型元素是否可重复是否有序定义符号
列表list可变序列可重复

有序

    []
元组tuple不可变序列可重复有序    ()
字典dict可变序列

Key不可重复

Value可重复

无序{key:value}
集合set可变序列不可重复无序     {}

Python 3.11 新特性

1、结构模式匹配

针对数据结构进行match匹配

语法结构:

match data:

case {}:

        pass

case []:

        pass

case ():

        pass

case_:

        pass

2、字典合并运算符

字典合并运算符  “|”

用 | 符号可以直接将两个字典合并起来。ep: merged_dict=d1|d2

3、同步迭代

可以在match匹配中同时迭代两个数据。

match data1, data2:

        case data1,data2:

                pass

它常与zip函数一同使用。

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

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

相关文章

string和char*的转换

1、使用 c_str() 方法: std::string 类提供了一个 c_str() 方法,它返回一个指向以 null 结尾的字符数组的指针(即 C 风格的字符串)。 std::string str "Hello"; const char* charPtr str.c_str();注意:返…

【YOLOV5 入门】——Pyside6/PyQt5可视化UI界面后端逻辑

声明:笔记是做项目时根据B站博主视频学习时自己编写,请勿随意转载! 一、环境安装 VScode/Pycharm终端进入虚拟环境后,输入下面代码安装pyside6,若用的Pycharm作为集成开发环境,也下载个pyqt5: …

得物 Zookeeper SLA 也可以 99.99% | 得物技术

一、背景 ZooKeeper(ZK)是一个诞生于2007年的分布式应用程序协调服务。尽管出于一些特殊的历史原因,许多业务场景仍然不得不依赖它。比如,Kafka、任务调度等。特别是在 Flink 混合部署 ETCD 解耦 时,业务方曾要求绝对…

什么是蓝桥杯?

蓝桥杯是中国著名的计算机程序设计竞赛,旨在挖掘和培养优秀的计算机人才。自2004年起,蓝桥杯已经成功举办多届比赛,吸引了全国各地的大批学生参与其中。这项比赛不仅是展示学生编程技能的平台,更是一个促进学术交流和提升创新能力…

C语言之探秘:访问结构体空指针与结构体空指针的地址的区别(九十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

npm配置阿里镜像库

1、配置阿里云镜像源 #查看当前使用的镜像地址命令 npm config get registry#设置阿里镜像源 npm config set registry http://registry.npmmirror.com 这里要注意下,之前的镜像源地址 https://registry.npm.taobao.org/ 已经不能用了,这里要更改为新…

SpringCloud之LoadBalancer负载均衡器的简单使用

SpringCloud之LoadBalancer负载均衡器的简单使用 loadbalancer用于对提供服务的集群做一个节点的选取规则。 如图所示&#xff0c;load balancer集成在调用方 示例 创建loadbalance-base模块,并引入相关依赖 <dependencies><dependency><groupId>org.spr…

【玩转PGSQL】基础管理防火墙及用户权限管理-知否知否

基础管理 登录方式 psql -d postgres -h 127.0.0.1 -p 5432 -U postgre-d 库 -h IP -p 端口 -U 用户基础sql -- 查看所有库 \l-- 创建库 create database test;-- 进入库 \c test-- 查看所有表 \d-- 查看表结构 \d t1;-- 查看所有用户 \du-- 列显示 \x-- 显示当前库下schem…

基于有序抖动块截断编码的水印嵌入和提取算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 噪声测试 旋转测试 压缩测试 2.算法运行软件版本 matlab2022a 3.部分核心程序 ............................................................…

STM32—外部中断_按键控制 LED

目录 1 、 电路构成及原理图 2 、编写实现代码 main.c exti.c 3、代码讲解 4、烧录到开发板调试、验证代码 5、检验效果 开发板介绍 相关笔记 此笔记基于朗峰 STM32F103 系列全集成开发板的记录 1 、 电路构成及原理图 外部中断---EXTI EXTI&#xff08;External…

codeforce #925 (div3) 题解

D. Divisible Pairs 给出数组 a a a&#xff0c;如果二元组 ( i , j ) (i,j) (i,j)满足 a i a j m o d x 0 & & a i − a j m o d y 0 a_i a_j mod x 0 \&\& a_i - a_j mod y 0 ai​aj​modx0&&ai​−aj​mody0&#xff0c;则beauty。其中 i &…

BEVFormer代码阅读

1. 代码地址 https://github.com/fundamentalvision/BEVFormer 2. 代码结构 个人理解&#xff0c;代码库中的代码与两篇论文都略有不同&#xff0c;总结起来&#xff0c;其结构如下。 3. BEVFormer 的 Pipeline 根据自己调试算法模型以及对论文的理解&#xff0c;我这里将 …

牛客网刷题 :BC50 你是天才吗

描述 据说智商140以上者称为天才&#xff0c;KiKi想知道他自己是不是天才&#xff0c;请帮他编程判断。输入一个整数表示一个人的智商&#xff0c;如果大于等于140&#xff0c;则表明他是一个天才&#xff0c;输出“Genius”。 输入描述&#xff1a; 多组输入&#xff0c;每…

(十)C++自制植物大战僵尸游戏设置功能实现

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/m0EtD 游戏设置 游戏设置功能是一个允许玩家根据个人喜好和设备性能来调整游戏各项参数的重要工具。游戏设置功能是为了让玩家能够根据自己的需求和设备性能来调整游戏&#xff0c;以获得最佳的游戏体验。不同的游戏和平…

音视频、网络带宽等常用概念详解

1.aac音频参数解释 AAC帧大小为1024个sample&#xff1a;指AAC编码一般以1024个采样为一个音频帧。 采样率48khz&#xff1a;指1秒&#xff08;即1000毫秒&#xff09;采集48000次。 计算1秒有多少帧&#xff1a;48000 / 1024 46.875 a&#xff08;用a表示计算结果&#xff0…

vite - WebAssembly入门

1. 初始化 vite 项目 1.1 安装 nvm&#xff08;可选&#xff09; brew update brew install nvm在 ~/.zshrc 添加 export NVM_DIR~/.nvm source $(brew --prefix nvm)/nvm.sh执行如下命令 source ~/.zshrc1.2 安装 node nvm install nodenvm ls -> …

PyTorch Scheduler动态调整学习率

文章目录 PyTorch动态调整学习率1.使用官方scheduler2.自定义scheduler参考 PyTorch动态调整学习率 深度学习中长久以来一直存在一个令人困扰的问题&#xff0c;那就是如何选择适当的学习率。如果学习速率设置得过小&#xff0c;会导致模型收敛速度缓慢&#xff0c;训练时间延…

vscode 打代码光标特效

vscode 打代码光标特效 在设置里面找到settings 进入之后在代码最下方加入此代码 "explorer.confirmDelete": false,"powermode.enabled": true, //启动"powermode.presets": "fireworks", // 火花效果// particles、 simple-rift、e…

Day13-C++基础之文件操作

文件操作 #include<iostream> #include<fstream> #include<string> using namespace std; ​ class Person{ public:char m_Name[64];int m_Age; }; ​ int main(){//文本文件操作 ​//写文件//1.包含头文件 fstream//2.创建流对象ofstream ofs;//3.指定打开…

如何利用OceanBase v4.2的 外部表简化外部数据处理

为什么需要使用外表 在日常的业务场景中&#xff0c;经常遇到需要在数据库中处理外部数据的情况&#xff0c;这些数据可能来源于应用程序&#xff0c;或者是其他业务系统。一般来说&#xff0c;常是通过ETL工具将外部数据库的数据导入到数据库内部的表中&#xff0c;再进行分析…