序列(sequence)
基本概念
- 序列是Python中最基本的一种数据结构。序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引)并且序列中的数据会按照添加的顺序来分配索引
- 数据结构指计算机中数据存储的方式
序列的分类
- 可变序列(序列中的元素可以改变):例如 列表(list)
- 不可变序列(序列中的元素不能改变):例如 字符串(str)元组(tuple)
列表(list)
- 列表是Python中的一个对象
- 列表的作用:
列表中可以保存多个有序的数据
列表是用来存储对象的对象 - 列表的使用
列表的创建:通过[]来创建一个空列表
list_1=[True, None,1,'1','a','切尔西',1.0,[True, None,1,'a','切尔西',1.0]]
切片
- 切片是指从现有列表中获得一个子列表
- 通过切片来获取指定的元素
- 语法: 列表[起始 : 结束 : 步长]
- 通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素
- 起始位置和结束位置的索引可以不写
如果省略结束位置, 则会从当前的开始位置一直截取到最后
如果省略开始位置, 则会从第一个元素截取到结束的元素,但是不包括结束的元素
如果开始位置和结束位置都省略, 则则会从第一个元素开始截取到最后一个元素 - 步长表示每次获取元素的间隔,默认是1(可以省略不写)
- 步长不能是0,但可以是是负数
通用操作
- +和 *
+ 可以将两个列表拼接成一个列表 * 可以将列表重复指定的次数 (注意2个列表不能够做乘法,要和整数做乘法运算)
* 可以将列表重复指定的次数 (注意2个列表不能够做乘法,要和整数做乘法运算)
list1 = [1, 2, 3] + [4, 5, 6]
list2 = [1, 2, 3] * 2
- in 和 not in
in用来检查指定元素是否在列表当中
not in 用来检查指定元素是否不在列表当中 - len() 获取列表中元素的个数
- max() 获取列表中最大值
- min() 获取列表中最小值
- list.index(x[, start[, end]])
第一个参数 获取指定元素在列表中的位置
第二个参数 表示查找的起始位置
第三个参数 表示查找的结束位置 - list.count(x) 统计指定元素在列表中出现的个数
1 in list_1
'1'not in list_1
len(list_1)
list_1.count(1)
print(list_1.find('e')) # 返回的是索引
print(list_1.index(2)) # 只能找到第一个值的索引并返回出来, 没有找到就报错
修改列表
- 通过切片来修改(起始就是给切片的内容重新赋值,但是赋值的内容必须是一个序列
- 当设置了步长时,序列中元素的个数必须和切片中元素的个数保持一致
- 通过切片来删除元素
del list[起始 : 结束]
list = []
list1 = ['德罗巴', '兰帕德', '巴拉克', '穆里尼奥', '切赫']
list1[1] = '芒特'#通过索引来修改 兰帕德改为了芒特
del list1[1]#关键字删除 索引为1的芒特被删除了
list1[0:2] = '切尔西'#相当于索引0与1的位置变成了'切''尔''西' 索引2是取不到的,所以原来的索引2保留
#['切', '尔', '西', '巴拉克', '穆里尼奥', '切赫']
# 通过切片来进行修改,当我们通过切片来进行元素的替换时,如果使用了绝对值不是1的步长,那么你取了多少个数据就要用多少个数据替换
list1[1::2] = [123, 456, 789]#ValueError: attempt to assign sequence of size 3 to extended slice of size 2
直观感受修改列表
list_a=[1,2,3,4,5,6,7,8]
list_a[0:1:1]=['a','b','c']#其实只是把索引0位置变成了'a''b''c',后面元素保留
print(list_a)
list_a[0:5:2]=['a','b','c']#list_a[0:4:2]=['a','b','c'] 取4的时候会报错
print(list_a)#步长为2,索引0的地方变成了'a',索引为2的地方变成了'b',索引为4的地方变成了'c',索引为5的地方不变
#['a', 2, 'b', 4, 'c', 6, 7, 8]
总结:通过切片修改列表时:
当步长为1时,左闭右开区间替换
当步长的绝对值为2或及以上时就是直接替换 list_a[0:5:2]=[‘a’,‘b’,‘c’]及list_a[0:6:2]=[‘a’,‘b’,‘c’]结果是一样的,区别在哪还不清楚但是7,8就会报错。
列表的更新
- append() 像列表的最后添加一个元素
- insert(arg1,arg2) 像列表指定位置插入一个元素 参数1:要插入的位置 参数2:要插入的元素
- extend(iterable) 使用一个新的序列来扩展当前序列(它会将该序列的中元素添加到列表中) 参数需要传递一个序列
list2=[]
list2.append('切尔西第一次')
list2.append('切尔西第二次')
list2.insert(1,'切尔西第三次')#在索引为1的地方插入
list2.extend(['1','2'])#在列表末尾追加一个其他列表
- pop() 根据索引删除并返回指定元素
- remove() 删除指定元素 (如果相同值的元素有多个,只会删除第一个)
list1 = ['德罗巴', '兰帕德', '巴拉克', '穆里尼奥', '切赫']
list1.remove('穆里尼奥')
del_1 = list1.pop(1)#索引为1的兰帕德被删除了
del_2 = list1.pop() #记得加括号,最后一个索引被删除
- reverse() 翻转列表
list1=[1,'1','切尔西',[1,2,3]]
list1.reverse()
- sort(key=None,reverse=False) 用来对列表中的元素进行排序 reverse:True反序;False 正序
list3 =['切尔西','切尔犀','c','cbc']#['切尔西', '切尔犀', 'cbc', 'c']
list3.sort(reverse=True)
list4 =[1,2,8,5,3,4]
list4.sort(reverse=True)#[8,5,4,3,2,1],降序排列
list4.sort(reverse=False)#[1, 2, 3, 4, 5, 8],升序排列
break 和 continue 语句
- break 可以用来立即退出循环语句,包括else语句
- continue 用来跳过当次循环
普通的continue
i = 0
while i < 8:
i += 1
if i ==5:
continue
print(i,end='')
else:
print()
print('切尔西')
#输出:
# 1234678
# 切尔西
continue死亡之作
i = 0
while i < 8:
if i == 5:
continue
i += 1
print(i)
else:
print('切尔西')
#当i变成5时跳出循环然后进入while i<8 i==5 又跳出循环然后进入while i<8 i==5然后就好家伙
#进入了无限月读模式
普通的break
i = 0
while i < 10:
i += 1
if i == 4:
break
print(i,end='')
else:
print('切尔西')
#输出为:123,i=4时直接跳出循环包括else
break嵌套循环
j = 0
while j < 2:
i = 0
j += 1
while i < 10:
i += 1
if i == 4:
break
print(i,end='')
else:
print('嵌套循环里的切尔西被跳过了')
else:
print()
print('这是嵌套循环外的切尔西')
#输出为:
# 123123
# 这是嵌套循环外的切尔西
#j=0小于2j变成了1
#当i=4时跳出了第二个循环打印123但是j在最外层循环又进入while j < 2的循环又打印了123然后j=2直接进行else
作业
现在有 a = [1,2,3,4,5,6] 用多种方式实现列表的反转([6,5,4,3,2,1]) 并写出推导过程
a = [1, 2, 3, 4, 5, 6]
print(a[::-1])#方法一:切片直接步长为-1
a.reverse()#方法二:直接翻转
a.sort(reverse=True)#方法三:因为原列表从小到大排列的,所以直接降序排列
有两个列表 lst1 = [11, 22, 33] lst2 = [22, 33, 44]获取内容相同的元素
lst1 = [11, 22, 33]
lst2 = [22, 33, 44]
same_Element = list(set(lst1).intersection(set(lst2)))#取出相同元素即取交集
print(same_Element)
lst1 = [11, 22, 33]
lst2 = [22, 33, 44]
same_Element = [i for i in lst1 if i in lst2]
print(same_Element)