文章目录
常用组合数据类型
- 组合数据类型是指相互之间存在一种或多种特定关系的数据元素的集合,用来存储一组相关的数据。
- Python中常见的组合数据类型有序列(如列表、元组、字符串)、映射(如字典)以及集合(set)。
序列
- 在Python中,把大量数据按次序排列而形成的集合体称为序列。Python中的字符串、列表和元组数据类型都是序列。
- 在Python中,所有序列类型都可以进行某些特定的操作。这些操作包括:索引(indexing)、分片(slicing)、加( adding)、乘(multiplying)以及检查某个元素是否属于序列的成员。除此之外,Python还有计算序列长度、找出最大元素和最小元素的内建函数。
-
列表list
- 列表是Python中最基本的数据结构。
- 列表将由若干数据作为元素的序列放置在一对方括号中, 元素之间以逗号分隔。
- Python列表元素可以由任意类型的数据构成。同一列表中各元素的类型可以各不相同。列表中的元素允许重复。
- Python列表是可以修改的,修改方式包括向列表添加元素、从列表删除元素以及对列表的某个元素进行修改。
- 列表的创建,即用一对方括号将以逗号分隔的若干数据(表达式的值)括起来。
list1=[1,2,3,4,5]
list2=['a',200,'b',150,'c',333]
list3=[] # 创建空列表
- 在Python中,经常用到列表中的列表,即二维列表。在这种情况下,列表中的元素也是元素。
list=[[1,2,3,4],[6,7,8,9]]
- 列表访问,也就是对列表的索引操作的过程,并返回索引位置上的的元素。
- 列表中的每个元素被关联一个序号,即元素的位置,也称为索引。 索引值是从0开始,第二个则是 1,以此类推,从左向右逐渐变大:;列表也可以从后往前,索引值从-1开始,从右向左逐渐变小。
- 索引访问方式适用于所有序列类型的对象:列表、元组、字符串。
- 1)一维列表的访问
list=[1,2,3,4]
list[0]
- 返回结果:1
list[-1]
- 返回结果:4
- 注意:列表的索引操作,如果索引超出了范围,则会导致出错。
- 若一个列表有n个元素,则访问元素的合法索引范围是-n~n-1,当序号x为负时, 表示从右边计数,其访问的元素实际为序号为n+x的元素。这个规律对所有序列类型均有效。
- 2)二维列表的访问
- 对二维列表中的元素进行访问,需要使用两对方括号来表示,第一个表示选择子列表,第二个在选中的子列表中再选择其元素。
list=[[1,2,3,4],[5,6,7,8]]
list[1][3]
- 返回结果:8
- 对二维列表中的元素进行访问,需要使用两对方括号来表示,第一个表示选择子列表,第二个在选中的子列表中再选择其元素。
- 列表中的元素可以通过重新赋值来更改某个元素的值,要注意列表元素的合法索引范围,超过范围则会出错。
list=['bus','car','ship','train']
list[-1]='bike'
list
- 返回结果:[‘bus’,‘car’,‘ship’,‘bike’]
- 在列表中,可以使用切片操作来选取指定位置上的元素组成新的列表。简单的切片方式为:
原列表名[start:end]- 需要提供开始值start和结束值end作为切片的开始和结束索引边界。
- 开始值start索引位置上的元素是包含在切片内的,结束值end索引位置上的元素则不包括在切片内.
- 当切片的左索引start为0时可缺省,当右索引end为列表长度时也可缺省。
- 这个简单的切片操作从原列表中选取索引位于[start、end)区间内的元素组成新的列表。
vehicle=['train','bus','car','ship']
vehicle[0:3]
- 返回结果:[‘train’,‘bus’,‘car’]
vehicle[:3]
- 返回结果:[‘train’,‘bus’,‘car’]
vehicle[3:]
- 返回结果:[‘ship’]
vehicle[:]
- 返回结果:[‘train’,‘bus’,‘car’,‘ship’]
vehicle[3:3]
- 返回结果:[]
- 对列表切片操作时,也可以使用负数作为索引。
vehicle[-3:-1]
- 返回结果:[‘bus’,‘car’]
vehicle[-2:]
- 返回结果:[‘ship’,‘car’]
- 以上列表切片操作都是获取索引值位于[start,end)区间内的连续位置上的元素组成新列表。也就是切片选取元素时,索引值每次增长的步长为1。
- 切片操作也可以提供一个非零整数(即可正可负,但不能为0)作为索引值增长的步长step值。使用方式为:
原列表名[start: end :step]- 当步长为1时,step参数可以省略。
- 步长step为1时可以省略,当步长step不为1时,该参数不可省略。
- 切片操作适用于所有序列类型。
n=list(range(10))
n[0:10:2]
- 返回结果:[0,2,4,6,8]
- 当切片开始值与结束值均省略,且步长step大于0,表示在整个原列表范围内,切片索引从第0个位置开始,每次增长step,直到超过原列表的索引范围。
n[::3]
- 返回结果:[0,3,6,9]
n[7:2:-1]
- 返回结果:[7,6,5,4,3]
n[11::-2] #11超过范围,实际索引从最后一个元素开始
- 返回结果:[9,7,5,3,1]
n[::-2] #这里步长为负数,表示在整个列表内,从后往前取值
- 返回结果:[9,7,5,3,1]
n[::-1]
- 返回结果:[9,8,7,6,5,4,3,2,1,0]
n[2:4]=[10,11]
n
- 返回结果:[0,1,10,11,4,5,6,7,8,9]
- 使用del命令可以从列表中删除元素,也可以删除整个列表。
list=['bus','car','ship','train']
del vehicle[3] #删除了'ship',同时也切记,不可以超出索引范围。
list
- 返回结果:[‘bus’,‘car’,‘ship’]
del vehicle #删除vehicle列表,列表vehicle不存在了,要是想返回vehicle列表的值就会报错
- 1)列表相加
- 通过列表相加的方法生成新列表。
list1=[1,2,3,4]
list2=[8,7,6,5]
list1+list2
- 返回结果:[1,2,3,4,8,7,6,5]
- 注意:list1和list2的值没有发生改变
- 通过列表相加的方法生成新列表。
- 2)列表相乘
- 用数字n乘以一个数列,会生成一个新列表。在新列表中原来列表的元素将被重复n次。
list1=[1,2,3]
list1*2
- 返回结果:[1,2,3,1,2,3]
- 注意:原列表保持不变。
- 用数字n乘以一个数列,会生成一个新列表。在新列表中原来列表的元素将被重复n次。
- 列表中的方法可看作是作用于Python中列表这一特定类型对象的函数。
- 1)index(value[,star=0[,stop]])
- index()方法用于从列表中找出与value值匹配的第一个元素索引位置。
- 如果没有指定参数start的值,则从索引为0的位置开始查找,否则从索引为start的位置开始查找。
- 如果没有指定结束索引位置stop的值,可以查找到列表最后元素,否则在位于[start,stop)内的索引区间查找。
- 如果找不到匹配项,就会引发异常。
- 实际上可以先使用in运算符测试某个元素是否在该列表中,避免用index()查找索引位置时由于找不到指定元素而导致的错误。
- 2)count()
- count()方法,用于统计某个元素在列表中出现的次数。
list=[1,2,2,3,3,3,4,4,4,4]
list.count(3)
- 返回结果:3
- count()方法,用于统计某个元素在列表中出现的次数。
- 添加列表元素除了前面介绍的"+“、”+=“、” * “、” *= "运算符以外,还有append()、extend()、insert()方法。
- 3)append()
- append()方法,追加单个元素到列表的尾部,只接受一个元素,元素可以是任何数据类型,被追加的元素在列表中保持着原结构类型。
- 例如:
vehicle=['ship','car','bus','train']
vehicle.append('plane') #追加一个元素plane
vehicle
- 返回结果:[‘ship’,‘car’,‘bus’,‘train’,‘plane’]
vehicle.append(8)
vehicle
- 返回结果:[‘ship’,‘car’,‘bus’,‘train’,‘plane’,8]
vehicle.append([8,9])
vehicle
- 返回结果:[‘ship’,‘car’,‘bus’,‘train’,‘plane’,8,[8,9]]
- 4)extend()
- 列表.extend()方法在列表的末尾追加该方法中参数容器(列表、元组、字符串、字典、集合)中的所有元素。如果参数为字典,则追加字典中的所有键(key).
list=[4,5,1,'ship','end']
list.extend(['car'])
list
- 返回结果:[4,5,1,‘ship’,‘end’,‘car’]
list.extend([8,9])
list
- 返回结果:[4,5,1,‘ship’,‘end’,‘car’,8,9]
- 列表.extend()方法在列表的末尾追加该方法中参数容器(列表、元组、字符串、字典、集合)中的所有元素。如果参数为字典,则追加字典中的所有键(key).
- 5)insert()
- insert()方法,将一个元素插入到列表中的指定位置。列表的insert方法有两个参数,第一个参数是索引点,即插入的位置,第二个参数是插入的元素。
vehicle=['train','bus','car','ship']
vehicle.insert(3,'plane')
vehicle
- 返回结果:[‘train’,‘bus’,‘car’,‘plane’,‘ship’]
vehicle.insert(0,'plane')
- 返回结果:[‘plane’,‘train’,‘bus’,‘car’,‘plane’,‘ship’]
vehicle.insert(-2,'bike')
vehicle
- 返回结果:[‘plane’,‘train’,‘bus’,‘car’,‘bike’,‘plane’,‘ship’]
- insert()函数中的特殊情况:索引值<0时,(索引值<len(列表)),其元素实际插入的位置为:索引值-1,即写的-2,却放在了 -3。
- insert()方法,将一个元素插入到列表中的指定位置。列表的insert方法有两个参数,第一个参数是索引点,即插入的位置,第二个参数是插入的元素。
- 删除列表元素除了前面介绍的del命令以外,还有remove()、pop()、clear()方法。
- 6)remove()
- remove()方法,用于移除列表中与某值匹配的第一个元素,如果找不到匹配项,就会引发异常。
list=[12,13,14,15,16,17,14,19,20]
list.remove(14)
list
- 返回结果:[12,13,15,16,17,14,19,20]
- remove()方法,用于移除列表中与某值匹配的第一个元素,如果找不到匹配项,就会引发异常。
- 7)pop()
- pop()方法用于移除列表中的一个元素(默认为最后一个元素),并且返回该元素的值。
- pop()方法可以指定索引位置,当不在索引范围内或者从空列表中使用此方法均会触发异常。
list=[23,34,45,56,67]
list.pop()
- 返回结果:67
list.pop(1)
- 返回结果:34
- 8)clear()
- clear()方法用于删除列表中所有元素,但保留列表对象。
list.clear()
list
- 返回结果:[] #空列表
- 注意:请注意与del命令的区别,del命令删除整个列表时,列表对象不再保留。
- clear()方法用于删除列表中所有元素,但保留列表对象。
- 列表排序有reverse()、sort()方法,另外还有reversed()、sorted()方法。
- 9)reverse()
- reverse()方法,用于将列表中的元素位置方向存放。列表中可以有不同类型的元素,reverse()方法只是将位置反转。
list=[12,34,56,78,90]
list.reverse()
- 返回结果:[90,78,56,34,12]
- reverse()方法,用于将列表中的元素位置方向存放。列表中可以有不同类型的元素,reverse()方法只是将位置反转。
- 10)sort()
- sort()方法,用于将列表中的元素进行排序。默认按升序排列。使用reverse参数来指明列表是否降序排列,参数是简单的布尔值True或F alse,若其值等于True表示降序排序,默认为False。如果列表中包含的是字符串,按字母串排序规则排序。可以使用key参数。
- 例子看图片:
列表函数
- 1)len()函数
- len()函数,用于返回列表中所包含元素的个数。
- 2)max()函数
- max()函数,用于返回列表中元素的最大值。
- 如果列表中包含的是字符串,按照字符串的比较大小方法排序返回最大值。
- 使用max()函数时,列表中只能包含可相互比较的元素,如列表元素中既有数字又有字符串则会出错。
- max()函数,用于返回列表中元素的最大值。
- 3)min()函数
- min()函数,用于返回列表中所包含元素的最小值。同样,如果列表表中包含的是字符串,也按字符串的比较大小方法排序返回最小值。
- 使用min()函数时,列表中只能包含可相互比较的元素。
- 4)reversed()函数
- reversed函数,将列表中的元素位置反向并返回可迭代的reversed对象。可以和list()联合起来使用得到列表。
- 例如:
- 5)sorted()函数
- sorted()函数,对列表进行排序并返回新列表。
- 例如:
列表遍历
- 可以通过for语句或者while语句循环遍历列表中所有元素。
元组tuple
- 元组由不同的元素组成,每个元素的数据类型可以各不大目同,如字符串、数字和元组等。
- 元组和列表十分相似,元组是用一对圆括号括起、用逗号号分隔的多个元素的组合。元组也是序列的一种,可以利用序列操作对元组进行处理。
- 元组的操作和列表有很多的相似之处,但元组和列表之间也存在重要的不同,元组是不可更改的,是不可变对象。元组创建之后就不能修改、添加、删除成员。元组的上述牛特点使得其在处理数据时效率较高,而且可以防止出现误修改操作。
- 元组的创建,即用一对圆括号将以逗号分割的若干元素(数据、表达式的值)括起来。
- 例子:
tuple1=(1,2,3,'manji')
tuple=('a',) #创建单一元素的元组 注意:当元组只有一个元素时,该元素后面的逗号不能省略。
tuple2=() #创建空元组
- 例子:
- 和列表一样,可以通过索引、切片来访问元组的成员。但是记住,元组不能更改元素值。
- 列表运算基本上都适用于元组,相加、相乘与列表操作一样。
- 与列表类似,也可以通过for语句或者while语句实现循环遍历元组中的所有元素。
列表与元组之间的转换
- Python中的tuple()函数可以接受一个列表,并返回一个包含同样元素的元组。从结果上看,tuple()函数冻结了列表。
list=[12,3,4,5,6,78,9]
tuple(list)
- 返回结果:(12,3,4,5,6,78,9)
- Python中的list()函数接受一个元组,并返回一个包含同样元素的列表。从结果上看,list()函数融化了元组。
numbers=(12,34,56,78,90)
list(number)
- 返回结果:[12,34,56,78,90]