序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字,也就是它的位置,或索引,其中,第一个索引是0,第二个索引是1,依此类推。
序列都可以进行包括索引,切片,加,乘,检查成员等操作。本篇文章主要从以下3个方面举例解释。
a. 列表的索引,切片,步长;
b. 列表的常用操作(如:增,删,改,查,以及其他操作);
c. 列表的嵌套。
1.列表的索引,切片,步长
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:
list1 = ['alex', 'Jenny', 2000]; list2 = [1, 2, 3, 4, 5 ]; list3 = ["a", "d", "r", "o"];
与上一篇博客介绍字符串的索引一样,列表索引也是从0开始。列表可以进行切片、组合等。列表内部可以是多种数据类型的组合,先举一个例子,如例1:
1 li = ['colin', 27, True, [1, 2, 3], {'name': 'colin'}, (22, 33)] 2 print(li[0], type(li[0])) # colin <class 'str'> 3 print(li[1], type(li[1])) # 27 <class 'int'> 4 print(li[2], type(li[2])) # True <class 'bool'> 5 print(li[3], type(li[3])) # [1, 2, 3] <class 'list'> 6 print(li[4], type(li[4])) # {'name': 'colin'} <class 'dict'> 7 print(li[5], type(li[5])) # (22, 33) <class 'tuple'>
从上面代码可以发现,列表的内容可以是字符串,整型,布尔类型,列表,字典,元组等类型。
同时也可以对列表进行切片操作,为了方便,对上面的列表操作,如例2:
1 li = ['colin', 27, True, [1, 2, 3], {'name': 'colin'}, (22, 33)] 2 print(li[0]) # colin 3 print(li[-1]) # (22, 33) 4 print(li[1:3]) # [27, True] 5 print(li[:4]) # ['colin', 27, True, [1, 2, 3]] 6 print(li[::2]) # ['colin', True, {'name': 'colin'}] 7 print(li[-1:-4:-2]) # [(22, 33), [1, 2, 3]] 8 print(li[-1:2:-2]) # [(22, 33), [1, 2, 3]]
2.列表的常用操作(如:增,删,改,查,以及其他操作)
通常对列表增操作有3种方法:append(),insert(),extend();
对列表的数据项进行修改或更新,通过使用append()方法来添加列表项,如下所示:
1 l1 = ['colin', 'zengsir', '华女神', '小谢老师'] 2 l1.append('小温老师') 3 print(l1.append('小温老师')) # None 4 print(l1) # ['colin', 'zengsir', '华女神', '小谢老师', '小温老师', '小温老师'] 5 l1.append([11, 22, 33]) 6 print(l1) # ['colin', 'zengsir', '华女神', '小谢老师', '小温老师', '小温老师', [11, 22, 33]]
将元素插入到指定的索引位置,使用insert():
1 l1 = ['colin', 'zengsir', '华女神', '小谢老师'] 2 l1.insert(0, 'xiaolin') # 插入到指定索引位置 3 print(l1) # ['xiaolin', 'colin', 'zengsir', '华女神', '小谢老师'] 4 l1.insert(-2, 'Jenny') 5 print(l1) # ['xiaolin', 'colin', 'zengsir', 'Jenny', '华女神', '小谢老师']
将插入的内容拆分成该成份的最小单元用extend()方法:
1 l1 = ['colin', 'zengsir', '华女神', '小谢老师'] 2 l1.extend('abc') 3 print(l1) # ['colin', 'zengsir', '华女神', '小谢老师', 'a', 'b', 'c'] 4 l1.extend([111, 222, 333]) 5 print(l1) # ['colin', 'zengsir', '华女神', '小谢老师', 'a', 'b', 'c', 111, 222, 333] 6 l1.extend(['colin', 'Jenny']) 7 print(l1) # ['colin', 'zengsir', '华女神', '小谢老师', 'a', 'b', 'c', 111, 222, 333, 'colin', 'Jenny']
通常对列表删除操作作有4种方法:pop(),remove(),clear(),del():
按索引删除,但是有返回值,使用pop()操作:
1 l1 = ['colin', 'zengsir', '华女神', '小谢老师'] 2 ret = l1.pop(0) # 按索引删除,但是有返回值 3 print(ret) # 有返回值,返回值为:colin 4 print(l1) # ['zengsir', '华女神', '小谢老师']
按照元素删除使用remove()操作:
1 l1 = ['colin', 'zengsir', '华女神', '小谢老师'] 2 l1.remove('华女神') 3 print(l1) # 按照元素删除 ['colin', 'zengsir', '小谢老师']
清空列表但容器还在,使用clear():
1 l1 = ['colin', 'zengsir', '华女神', '小谢老师'] 2 l1.clear() # 去清空列表,但是容器还在 3 print(l1)
del() 删除有三种操作方法
1 l1 = ['colin', 'zengsir', '华女神', '小谢老师'] 2 # 按照索引删除 3 del l1[0] # ['zengsir', '华女神', '小谢老师'] 4 print(l1) 5 # 可以按照切片去删除(可以加步长) 6 del l1[::2] 7 print(l1) # ['华女神'] 8 # 可以在内存级别删除整个列表 9 del l1 10 print(l1) # 报错
通常对列表改操作有两种方法:
1 . 按照索引改元素
2. 按照切片,或者切片+步长改元素
例题:
1 l1 = ['alex', 'wusir', 'taibai', 'egon', '景女神', '文周老师', '日天老师'] 2 # 按索引去修改 3 l1[2] = '男神' 4 l1[-1] = '泰迪' 5 print(l1) # ['alex', 'wusir', '男神', 'egon', '景女神', '文周老师', '泰迪'] 6 # 按照切片改 7 l1[:2] = 'sbsbsb' # 先清空位置,然后将内容添加到清空的区域 8 print(l1) # ['s', 'b', 's', 'b', 's', 'b', 'taibai', 'egon', '景女神', '文周老师', '日天老师'] 9 l1[:4] = [11, 22, 33, 44, 55, 66, 77] 10 print(l1) # [11, 22, 33, 44, 55, 66, 77, '景女神', '文周老师', '日天老师'] 11 # 按照切片+步长改 12 l1[:3:2] = 'af' 13 print(l1) # ['a', 'wusir', 'f', 'egon', '景女神', '文周老师', '日天老师']
通常对列表查操作有两种方法:
1. 按索引,切片,切片+步长
2. for循环
1 l1 = ['alex', 'wusir', 'taibai', 'egon', '景女神', '文周老师', '日天老师'] 2 for i in l1: 3 print(i)
其他方法(len(), count(), sort(), reverse()):
1 l1 = ['alex', 'wusir', 'taibai', 'egon', '景女神', '文周老师', '日天老师'] 2 print(len(l1)) # 查询总个数 7 3 print(l1.count('alex')) # 查询某个元素出现的次数 1 4 l2 = [5, 2, 6, 3, 1, 4, 7, 9] 5 l2.sort() # 从小到大排序 6 print(l2) # [1, 2, 3, 4, 5, 6, 7, 9] 7 l2.sort(reverse = True) # 从小到大排序 8 print(l2) # [9, 7, 6, 5, 4, 3, 2, 1] 9 l2.reverse() # 整体翻转 10 print(l2) [1, 2, 3, 4, 5, 6, 7, 9]
元组操作:
元组操作通常也有两类操作方法:
1, 索引,切片,切片+步长
2, for循环
1 # 索引,切片,切片+步长 2 info = ('colin', 100, True, [1, 2, 3], {'name':'Jenny'}, (22, 33)) 3 print(info[0]) # 索引 4 print(info[:3]) # 切片 5 print(info[::2]) #切片+步长
1 # for 循环 2 info = ('colin', 100, True, [1, 2, 3], {'name':'Jenny'}, (22, 33)) 3 for i in info: 4 print(i)
'''---应用场景:一些非常重要的数据,不允许所有人修改,所以放在元组中。---'''
此外:
1 # info[3].append(666) # ('colin', 100, True, [1, 2, 3, 666], {'name': 'Jenny'}, (22, 33)) 2 # print(info) 3 # info.append(666) # 报错 4 # print(info)
从上可以说明,元组本身是不能修改的,但是元组内部嵌套了列表,字典等是可以修改。
range()方法:
1 ''' --- range() 一般和for 循环结合使用------------''' 2 for i in range(1,11): 3 print(i) # 1 2 3 4 5 6 7 8 9 10 4 ''' -----分隔--------''' 5 for i in range(1, 11, 2): 6 print(i) # 1 3 5 7 9 7 '''-------逆序切片----------''' 8 for i in range(10, 1, -2): 9 print(i) # 10 8 6 4 2
每日一练:
1 '''-- 例:l3 = ['alex', 'wusir', ['taibai',99,'ritian'], 20] ---''' 2 '''---------------找到alex的e元素。----------------------''' 3 l3 = ['alex', 'wusir', ['taibai',99,'ritian'], 20] 4 print(l3[0][2]) 5 '''---------------将wusir变成大写。----------------------------''' 6 l3[1] = l3[1].upper() 7 print(l3) 8 '''---------------给此列表['taibai',99,'ritian'] 追加一个元素,'文周'---------''' 9 l3[2].append('文周') 10 print(l3) 11 '''---------------将 'taibai' 首字母大写----------------------''' 12 l3[2][0] = l3[2][0].capitalize() 13 print(l3) 14 '''---------------将 99 通过数字加1 的方式变成100,并放回原处-----------''' 15 l3[2][1] = l3[2][1] + 1 16 print(l3)