所谓序列,指的是一种包含多项数据的数据结构,序列包含的多个数据项(也叫成员)按顺序排列,可通过索引来访问成员
python的常见序列类型包括字符串、列表和元组。
在具体的编程过程中,如果只是固定的保存多个数据项,则不需要修改它们,此时就应该使用元组,反之使用列表
简单讲:列表与元组的关系就是可变与不可变的关系
创建列表与元组
创建列表与元组的语法也有点相似:
- 创建列表使用方括号[ ]
- 创建元组使用圆括号( )
- 其元素(成员)用英文逗号隔开
列表语法:list = [ele1,ele2,ele3……]
元组语法:tuple = (ele1,ele2,ele3……)
访问其元素的方法与字符串相同:使用索引
示例:
#列表访问
list = ["continue",11,"python",20]
print(list) #访问所有元素
print(list[0]) #访问第一个元素
print(list[1]) #访问第二个元素
print(list[-1]) #访问倒数第一个元素
#元组访问
tuple = ("city",15,20,"pig")
print(tuple) #访问所有元素
print(tuple[0]) #访问第一个元素
print(tuple[1]) #访问第二个元素
print(tuple[-1]) #访问倒数第一个元素
列表与元组切片
列表与元组也可以使用索引获取中间一段,这种用法称为slice(分片或切片)
slice语法:[ start : end : step ]
start与end两个索引值可以是正数也可以是负数,其中负数从倒数位置开始,start和end满足“前包后不包”原则
step表示步长,因此step使用负数没有意义
示例:
#列表切片
list = ["continue",11,"python",20]
print(list[0:2]) #从第一个位置到第三个位置(不包含第三个元素)
print(list[-3:-1]) #从倒数第三个位置到倒数第一个位置(不包含倒数第一个元素)
print(list[1:-2]) #从第一个位置到倒数第二个位置(不包含倒数第二个元素)
步长示例
print(list[1:4:2]) #从第一个位置到第四个位置,间隔为2
# "continue","python"
#元组切片
tuple = ("city",15,20,"pig")
print(tuple[0:2]) #从第一个位置到第三个位置(不包含第三个元素)
print(tuple[-3:-1]) #从倒数第三个位置到倒数第一个位置(不包含倒数第一个元素)
print(tuple[1:-2]) #从第一个位置到倒数第二个位置(不包含倒数第二个元素)
#步长示例
print(tuple[1:4:2]) #从第一个位置到第四个位置,间隔为2
# "city",20
列表与元组的加法运算
列表与元组支持加法运算,加法运算的和就是两个列表或元组的所有元素之和
注意:列表只能与列表相加,元组只能与元组相加,元组不能直接与列表相加
示例:
#列表加法
list1 = ["continue",11,"python",20]
list2 = [1,2,3]
sum_list = list1 + list2
print(sum_list)
#元组加法
tuple1 = ("city",15,20,"pig")
tuple2 = (1,2,3)
sum_tuple = tuple1 + tuple2
print(sum_tuple)
列表与元组的乘法运算
列表与元组支持与整数进行乘法运算,列表与元组的乘法运算就是把它们包含的元素重复N次(N就是被乘的倍数)
示例:
#列表乘法
list = ["continue",11,"python",20]
a = list * 3
print(a)
#元组乘法
tuple = ("city",15,20,"pig")
b = tuple * 3
print(b)
in运算符
in运算符用于判断列表或元组是否包含某个元素
示例:
#列表 in
list = ["continue",11,"python",20]
print("python" in list) #True
print(21 in list) #False
#元组 in
tuple = ("city",15,20,"pig")
print("city" in tuple) #True
print(24 in tuple) #False
长度、最大值和最小值
python提供了内置的len()、max()和min()全局函数来获取列表与元组的长度、最大值和最小值
由于max()和min()函数要对列表、元组中的元素进行比较大小,所以传给max()和min()函数的列表、元组必须是相同类型的并且可以比较大小
示例:
#列表 len() max() min()
list = [1,11,2,20]
print(len(list))
print(max(list))
print(min(list))
#元组 len() max() min()
tuple = (1,15,20,2)
print(len(tuple))
print(max(tuple))
print(min(tuple))
序列封包和序列解包
python还提供了序列封包和序列解包的功能。简单来说,python支持以下两种赋值方式:
- 程序把多个值赋给一个变量时,python会自动将多个值封装成一个元组。这种功能被称为序列封包
- 程序允许将序列(列表或元组等)直接赋值给多个变量,此时序列的各元素会依次赋值给每个变量(要求序列的元素个数与变量个数相同)。这种功能被称为序列解包
示例:
#序列封包:自动将多个值封装成元组
val = 10,20,30
print(val) #(10,20,30)
print(type(val)) #<class 'tuple'>
#序列解包:元组或列表等赋值给多个变量
tuple = tuple(range(1,10,2))
a,b,c,d,e = tuple
print(a,b,c,d,e)
print(type(a)) #int
list = ["dog","pig"]
str1,str2 = list
print(str1,str2)
print(type(str1)) #str
根据这两个功能可以实现多个变量输入多个值
示例:
x,y,z = 10,20,30
#上述代码等于下面代码
#先执行程序封包
xyz = 10,20,30
#再执行程序解包
x,y,z = xyz
使用这种语法,也可以实现交换变量的值
示例:
x,y,z = 10,20,30
#将y,z,x依次赋值给x,y,z
x,y,z = y,z,x
print(x,y,z)
在序列解包时可以只接触部分变量,剩下的依然使用列表变量保存。为了使用这种解包方法,python允许在左边被赋值的变量之前添加了 * ,那么该变量就代表一个列表,可以保存多个元素
示例:
first,second,*rest = range(1,10)
print(first) #保存第一个元素
print(second) #保存第二个元素
print(rest) #保存剩下的元素
*begin,last = range(1,10)
print(begin) #保存最后一个元素
print(last) #保存前面剩下的元素
print(type(begin))# list
print(type(last)) # int
还有first,*middle,last的格式