目录
一、组合数据类型
1.1 序列类型
序列类型来源于数学概念中的数列,数列时按照一定顺序一列的一组数,每个数称之为这个数列的项,每项不是在其他项之前,就是在其他项之后。数列的索引从0开始,通过索引可以访问数列中的第n-1项。
序列在数列的基础上进行了扩展,pthon中的序列支持双向索引,正向递增索引和反向递减索引。
正向递增索引从左向右依次递增,第一个元素索引为0,第二个元素索引为1,以此类推。反向递减索引时从右到左以此递减,从左到右第一个元素为-1,第二个元素为-2以此类推。
python中常用的序列类型主要有3中,字符串(str),列表(list),元组(tuple)。
1.2 集合类型
数学中的集合是指具有魔咒特定性质的对象汇总而成的集体,其中组成集合的对象称之为该集合的元素。在表示法中通常使用大写字母表示集合,使用小写字母表示该集合中的元素。且集合中的元素具有以下三个特性:
1.确定性:集合中每个元素都是确定的。
2.互异性:集合中每个元素互不相同。
3.无序性:集合中的元素没有顺序,若多个集合元素顺序不同元素相同那么这类集合为同一集合。
python中要求放入集合中的元素必须时不可变类型的(整型、浮点型、字符串类型、元组属于不可变类型列表、字典和集合本身属于可变数据类型).
1.3 映射类型
映射类型以键值对的形式储存元素,键值对中的键与值之间存在映射关系,在数学中若A、B是两个非空集合,若按照某个对应法则可以使A中任意一个元素在集合B中都有位移的对应元素,则称该法则为集合A到集合B的映射。
字典dict是python中位移的内置映射类型,字典的键必须遵循以下两个原则。
(1)、每个键只能对应一个值,不允许同一个键在字典中重复出现。
(2)、字典中的键是不可变类型
二、元组
元组的表现形式一般报刊在圆括号“()”中,由逗号分的元素,元组中元素的个数类型不受限制
t1 = () #创建空元组
t2 = (1,) #包含单个元素的元组,其中逗号不能省略
t3 = (1,2,3) #包含多个元素的元组
t4 = (1,'c',("e",2)) #元组嵌套
使用内置函数tuple()也能创建元组
t1 = tuple() #创建空元组
t2 = tuple([1,2,3]) #利用列表创建元组(1,2,3)
t3 = tuple('python') #利用字符串创建元组('p','y','t','h','o','n')
t4 = tuple(range(3)) #利用迭代对象创建元组(0,1,2)
python可以通过索引和切片的方式访问元组元素,也支持在循环中遍历元组
t2 = tuple([1,2,3]) #利用列表创建元组(1,2,3)
t3 = tuple('python') #利用字符串创建元组('p','y','t','h','o','n')
print(t2[1]) #利用索引方式访问元组元素
print(t3[2:5]) #利用切片方式访问元组元素
for data in t3: #在循环中遍历元组
print(data,end='')
运行结果如下:
三、列表
python利用内存中的一段连续空间存储列表,列表时puthon中最灵活的序列类型,列表没有长度限制,可以包括任意元素,可以自由地对列表中的元素进行访问、添加、排序、删除等操作
3.1创建列表
1.使用中括号“[ ]”创建列表
[ ]中包括的可以是列表元素(整形、浮点型、字符串),也可以是列表、元组、字典类型。列表元素的类型可以相同也可以不同。列表中的元素使用“,”分割开。
list_one = [] #空列表
list_two = ['a','b','c'] #链表元素类型相同
list_three = ['a','1','b','2.1','#'] #列表元素类型不同
list_three = ['a','1','b','2.1','#',list_three] #列表嵌套
2.使用list()函数创建列表
list()函数接收一个可迭代类型数据,并返回一个列表
list_one = list(1)
list_two = list(A)
list_three = list(1,'A')
python中可迭代对象:
1、它是能够一次返回一个成员的对象,也就是可以 for…in 遍历的;
2、所有的序列类型(也就是后面要说到的 Sequence),都是可迭代对象,如 list、str、tuple,还有映射类型 dict、文件对象等非序列类型也是可迭代对象;
3、自定义对象在实现了 iter() 方法或者实现了 getitem() 方法后,也可以成为可迭代对象;
4、iter()方法接受一个可迭代对象,该方法的返回值是一个迭代器(Iterator)
3.2 访问列表元素
列表元素可以利用索引和切片发方式访问,若在循环中可以通过以此访问。
1.以索引方式访问列表元素
访问列表list中索引为n的元素是语法格式
list[n]
因为正向递增索引从左向右依次递增,第一个元素索引为0,第二个元素索引为1,以此类推。反向递减索引时从右到左以此递减,从左到右第一个元素为-1,第二个元素为-2以此类推。
list_text = ['a','b','c','d','e']
print(list_text[2])
print(list_text[-4])
运行结果:
2.以切片的方式访问列表元素
切片用于截取列表中的部分元素获取一个新的列表,一般通过按补偿step获取列表list中m~n的对应元素,stepdaughte默认为1:m和n可以省略,若m省略,表示切片从列表首部开始,若n省略表示切片到末尾结束。
示例代码:
list_text = ['a','b','c','d','e','f']
print(list_text[1:4:1]) #按步长1获取列表中索引1~4中的元素
print(list_text[3:]) #获取列表中索引3到末尾的元素
print(list_text[:4]) #获取列表中0~4的元素
print(list_text[:]) #获取列表中的所有元素
运行结果:
3.在循环中以此访问列表元素
列表是一个可迭代的对象,在for...in...语句中逐个访问列表元素。
list_text = ['a','b','c','d','e','f']
for li in list_text:
print(li,end='')
运行结果:
4.查询列表元素
通过使用in和not in对列表中元素进行查询,in可以判断某个元素是否存在于列表,not in可以判断某个元素是否不存在于列表。
li = ['a','b','c','d','e','f']
print('a' in li)
print('b' not in li)
运行结果:
3.3 添加列表元素
1.append()
该函数用于在列表末尾处添加新的元素。
li = ['a','b','c','d','e','f']
li.append('g')
print(li)
运行结果:
2.extend()
该函数用于在列表末尾一次性添加另外一个链表中的所有元素
li_one = ['a','b','c','d']
li_two = [1,2,3]
li_one.extend(li_two)
print(li_one)
运行结果:
3.insert()
该函数用于按照索引将新的元素插入到列表中的指定位置。
li_one = ['a','b','c','d']
li_two = [1,2,3]
li_one.insert(2,li_two)
print(li_one)
运行结果:
3.4 元素排列
1.sort()
用于按照指定的顺序对列表元素进行排序,语法格式:
sort(key=None,reverse=False)
参数key用于指定排序规则,此参数可以是列表支持的函数,默认值为None:参数reverse用于控制列表元素排列的方式,该参数可以使取值True或是False,取值为True表示降序排列,取值为False表示升序排列。
sort()对列表元素排序后有序的元素会付给原来的列表元素,不会产生新的元素。
li_one = [9,5,4,8]
li_two = [5,8,6,4]
li_three = ['four','two','three']
li_one.sort() #升序排列
li_two.sort(reverse=True) #降序排列
li_three.sort(key=len) #len()函数可以计算字符串长度,按照列表中每个字符串元素的长度排列
print(li_one)
print(li_two)
print(li_three)
运行结果:
2.sorted()
用于升序排列列表元素,其方法的返回值是升序后的新列表,且不会覆盖原有列表、
li_one = [9,5,4,8]
li_two = sorted(li_one)
print(li_one)
print(li_two)
运行结果:
3.reverse()
用于逆置列表,即八原链表中的元素从右到左以此排列存放
li_one = [9,5,4,8]
li_two = sorted(li_one)
li_two.reverse()
print(li_one)
print(li_two)
运行结果:
3.5 删除列表元素
1.del语句
用于删除列表中的指定元素
li_str = ['one','two','three']
del li_str[1]
print(li_str)
运行结果:
2.remove()
用于删除列表中的某个元素,若列表中匹配到了多个目标元素remove()只能移除第一个匹配到的元素。
li_str = ['one','two','three']
li_str.remove('one')
print(li_str)
运行结果:
3.pop()
用于移除列表中的某个元素,若未指定具体元素,则移除列表中最后一个元素。
numbers = [1,2,3,4]
print(numbers.pop()) #移除列表中最后一个元素
print(numbers.pop(1)) #移除列表中索引为1的元素
print(numbers)
运行结果:
3.6 列表推导式
列表推导式是一种复合表达式,它能以简洁的方式根据已有的列表构建处特定需求的列表。因为[]创建列表,列表推导式生成列表所以列表推导式常放在[]中
[exp for x in list]
for...in...用于遍历列表
exp用于每层循环中对列表中的元素进行运算。
例如求列表中每个数的平方:
numbers = [1,2,3,4]
numbers = [data*data for data in numbers]
print(numbers)
运行结果:
1.带有if语句的列表推导式
[exp for x in list if cond]
主要功能:遍历列表,若列表中的元素x符合条件cond则按照表达式exp对其进行运算后添加至新的列表中。
numbers = [1,2,3,4]
numbers = [data*data for data in numbers if data>=4]
print(numbers)
运行结果:
2.带有for循环语句的列表推导式
[exp for x in list_one for y in list_two]
主要功能:for语句按照从左到右的顺序分别是外层循环和内层循环,利用此格式可以根据两个列表快速生成一个新的列表。
number_one = [1,2,3]
number_two = [4,5,6]
numbers = [x+y for x in number_one for y in number_two]
print(numbers)
运行结果:
3.带有if语句和嵌套for循环语句的了表推导式:
列表推导式中嵌套for循环可以有多个,每个循环也都可以与if语句连用
语法格式:
[exp for x in li_1 [ifcond]
for x in li_2 [ifcond]
...
for x in li_1 [ifcond]]