从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函数一同使用。

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值