本文属于小编在博客中分享的关于学习李刚《疯狂python讲义》系列学习日志,在这篇文章里主要分享python中使用的序列容器。
所谓序列,是一种可以包含多项数据的数据结构,序列包含的多个数据按照顺序排列,课可以通过索引进行访问。
Python中应用到的序列有列表(list)、元祖(tuple)和字典(dict)。列表中的元素是可变的,而元祖中的元素是不可变的。
使用方括号创建列表,使用圆括号创建元祖。
#使用方括号定义列表
my_list=['crazy','handsome','smart']
#使用圆括号定义元祖
my_tuple=['crazy','handsome','smart']
索引是访问序列元素最为朴素的方法,值得注意的是在python中由于元组中的元素是不可变的,因此通过索引访问元组的元素时只可以使用它的值,但是不能重新赋值。
a_tuple=('hello','你好')
#访问元组第一个元素
print(a_tuple)
#访问第二个元素
print(a_tuple[1])
#访问倒数第一个元素
print(a_tuple[-1])
所谓子序列即访问列表或元组中指定的一段元素。
[start:end:step]#其中start表示起始位置(包含),end表示结束位置(不包含),step表示步长
start和end的数值可正可负,当数值为负数时。代表从倒数的位置开始。
a_tuple=(1,2,3,4,5,6,7,8,9)
#访问第2个元素到第4(不包含)个元素
print(a_tuple[1:3])#输出2,3
#访问倒数第3个到倒数第1个(不包含)元素
print(a_tuple[-3:-1])#输出7,8
#访问第三个到第九个(不包含)元素,间隔为2
print(a_tuple[3:9:2])
列表和元祖支持加法运算,加法的和就是两个列表或元组所包含的元素的和,列表只能和列表相加,元组只能和元组相加。
#下面演示两个元组相加
a_tuple=(1,2,3)
b_tuple=(4,5,6)
c_tuple=a_tuple+b_tuple
print(c_tuple)#输出1,2,3,4,5,6
#接下来演示列表相加
a_list=[1,2,3]
b_list=[4,5,6]
c_list=a_list+b_list
print(c_list)#输出1,2,3,4,5,6
列表和元组可以和整数执行乘法运算,相当于把他们包含的元素重复整数遍。
a_tuple=('1','2')
b_tuple=a_tuple*3
print(b_tuple)#输出1,2,1,2,1,2
列表和元组可以使用in运算符来判断某个元素是否在其中。
a_tuple=('a','c','c')
print('a' in a_tuple)#输出True
列表和元组可以使用len()、max()、min()函数进行相关操作。
所谓封包是指,可以将多个值赋给一个变量,python会自动将多个值封装为元组。解包是指将序列直接赋值给多个变量,序列中的各个元素会被依次赋值给每个变量。
#封包
vals=10,20,30
print(vals)#输出10,20,30
print(type(vals))#输出
a_tuple=tuple(range(1,10,2))
#序列解包
a,b,c,d,e=a_tuple
print(a,b,c,d,e)#输出1,3,5,7,9
python允许在左边被赋值的变量之前添加*,那么该变量就变成一个列表,可以保存多个元素。
first,*middle,last=range(10)
print(first)# 0
print(middle)#1,2,3,4,5,6,7,8
print(last)#9
元组和列表的区别在于,元素中的元素是不可改变的。因此可以认为列表是增强版的元组。
对于列表来说除了使用括号创建列表之外,还可以使用list()函数来创建。(python也为元组提供了tuple()构造函数来讲列表和区间转换为元组)
a_tuple=('hello','every','one')
#将元组转换为列表
a_list=list(a_tuple)
#将区间转换为列表
a_range=range(1,6)
b_list=list(a_range)
c_list=list(range(1,6,2))
列表可以使用append()方法将传入的参数添加到列表的最后面,append()方法可以接收单个值,也可以接收一个元组、列表等,此时只是把元组和列表当成单个元素,在列表中通过append方法加入元组或列表,会在加入的列表中形成嵌套。
a_list=['1','2','3']
#追加一个元素
a_list.append('4')
print(a_list)#1,2,3,4
a_tuple=('5','6','7')
a_list.append(a_tuple)
print(a_lsit)#1,2,3,4,(5,6,7)#追加的a_tuple被整个视为一个元素
如果向列表追加一个列表不希望被视为一个元素,而是添加列表中的元素,则可以使用extend()方法。
b_list=['2','3','4']
b_list.extend(('5','6','7'))
print(b_list)#1,2,3,4,5,6,7
还可以使用insert()方法在列表中间插入元素。
c_list=range(1,6)
#在索引3处插入字符串
c_list.insert(3,'crazy')
print(c_lsit)#1,2,3,crazy,4,5
c_list.insert(3,tuple('crazy'))
print(c_list)#1,2,3,(c,r,a,z,y),'crazy',4,5
python中提供了3种删除列表元素的方法。
a_list=[1,2,3,4,5]
del a_lsit[2]
print(a_list)#输出1,2,4,5
del a_list[1:3]
print(a_list)#输出1,5
name= 'crazy'
print(name)#'crazy'
del name
print(name)#'NameError'
c_list=[20,'crazyit',30,-4,'crazyit',3.4]
#删除第一次找到的30
c_list.remove(30)
print(c_list)#输出20,‘crazyit’,-4,'crazyit',3.4
c_list.clear()
print(c_list)#[]
a_list=[2,4,-3.4,'crazyit',23]
#对第三个元素赋值
a_list[2]='fkit'
#对倒数第二个元素赋值
a_list[-2]=9527
#可以使用slice对列表赋值
b_list=list(range(1,5))
print(b_list)#输出1,2,3,4
b_list[1:3]=['a','b']
print(b_list)#输出1,a,b,4
#对列表中的空slice赋值,实现对列表插入元素
b_list[3:3]=['x','y']
print(b_list)#输出1,a,x,y,b,4
#对列表使用slice赋值不能使用单个值,如果使用字符串赋值python会把字符串当成序列处理
b_list[1:3]='charlie'
print(b_list)#1,c,h,a,r,l,i,e
#在使用slice语法赋值时也可指定step参数,如果指定了step参数,要求赋值的列表个数与所替换的列表元素个数相等。
c_list=list(range(1,10))
#指定step为2,被赋值的元素有4个,因此用于赋值的元素必须有四个元素。
c_list[2:9:2]=['a','b','c','d']
print(c_list)#输出1,2,a,4,b,6,c,8,d
b_list=['python','swift','ruby','Go','Kotlin','Erlang']
b_list.sort(key=len,reverse=true)#使用len()函数对集合元素生成比较大小的键
程序可以使用花括号或dict()函数来创建字典,字典的key值需要是不可变类型的。
scores={'语文':89,'数学':92,'英语':93}
empty_dict={}#创建了一个空的字典
使用dict()函数创建字典时,可以传入多个列表或元组参数作为key-value对,每个列表或元组都会被当成一个key-value对,因此这些列表或者元组都只能包含两个元素。
vegetables=[('celery',1.58),('brocoli',1.29),('lecture',2.19)]
dict=dict(vegetables)
dict11=dict(me=7,you=3)#实现你三我七
scores={'语文':89}
#通过key访问value
print(scores['语文'])
#添加一个key-value
scores['数学']=93
#使用del删除key-value
del scores['语文']
#判断字典是否包含指定的Key
print('语文' in scores)#true
#在字符串模板中使用Key
temp='书名是:%(name)s,价格是:%(price)010.2f,出版社是:%(publish)s'
book={'name':'疯狂python讲义','price':88.9,'publish':'电子社'}
print(temp%book)