目录
一.序列
1.定义
序列指的是一块可存放多个值的连续内存空间,这些值按一定的顺序排列,可通过每个值所在位置编号(即索引)访问。
2.相关操作
索引
序列名[ ]
#以列表为例
list01=[1, 2, 3]
print(list01[1])
print(list01[-1])
运行的结果是2,3
需要注意的是,列表中的索引从0开始,到 len-1 结束。当然,也存在倒序,从-1开始,到-len 结束。
print(list01[4])
print(list01[-5])
#超出序列长度会报错
无论是索引从正开始还是从负开始,超出序列长度会报错。
长度
可以用 len()来查看序列长度。
#字符串
example1 = 'python'
print(len(example1))
#列表
example2 = ['a', 'b', 'c']
print(len(example2))
#元组
example3 = ('d', 'e', 'f')
print(len(example3))
运行结果如下:
相加
python支持对两种相同类型的序列进行相加,即用(+)进行序列连接。
#相加
#顺序不同,打印出来的结果也不同
list01=['唐僧', '孙悟空', '猪八戒', '沙僧']
list02=['黑熊怪', '女儿国国王']
print(list01+list02)
print(list02+list01)
运行结果是:
当类型不相同时,无法运行程序,会出错
#不同类型相加
list03 = ['西游记', 1]
list04 = {2: '红楼梦'}
print(list03+list04)
运行结果:会出现以下错误
重复
序列*n会生成一个将原序列重复n次的新序列
#序列的重复
list05=[1, 2, 3]
list06=list05 * 3
print(list06)
#用id()查看是否形成新序列
print(id(list05))
print(id(list06))
运行结果是:
检查成员(成员归属)
python中采用in或者not in来检查一个值是否在序列中,返回的是True或者False
#in 和 not in 判断一个值是否在序列中
list01=['唐僧', '孙悟空', '猪八戒', '沙僧', '黑熊怪', '女儿国国王']
if '孙悟空' in list01:
print('该值在列表中')
else:
print('该值不在列表中')
if 'hhh' not in list01:
print('该值不在列表中')
else:
print('该值在列表中')
运行结果是:
最大值:max()
max( )可以计算序列中最大的元素
#用max()获得序列里最大的元素
list01 = [1, 2, 3]
print(max(list01))
运行结果是:
字符串的比较是逐个比较每一个字符,直到遇到不相等的为止
#用max()获得序列里最大的元素
list02 = ['a', 'b', 'c']
print(max(list02))
#字符串用Unicode进行大小比较
#chr()函数可以返回Unicode对应的单个字符
#ord()函数可以返回单个字符的Unicode
print('字符串的Unicode是:', ord('a'))
#汉字有汉字的比较方式
list03=['唐僧', '孙悟空', '猪八戒', '沙僧', '黑熊怪', '女儿国国王']
print(max(list03))
运行结果是:
并不是序列内所有都可以进行比较
#并不是所有的元素都可以进行比较
list03 = ['西游记', 1]
print(max(list03))
运行结果是:
最小值:min()
同最大值
切片
从序列中截取部分元素组成新的序列,不会对原序列产生任何影响。
语法格式:seq[start : syop : step]
其中,seq表示序列名称,start为开始的索引,不传值默认为0,end为结束的索引,不传值默认为序列长度,step为步长,不传值默认为1
#切片的具体使用
list01 = ['唐僧', '孙悟空', '猪八戒', '沙僧', '黑熊怪', '女儿国国王']
print('list01[:]',list01[:])
print('list01[1:5]',list01[1:5])
print('list01[1:5:2]',list01[1:5:2])
运行结果为:
查找元素
语法格式:seq.index(x[,i[,j ] ])
从 i 到 j 的范围里x第一次出现的索引
#查找元素举例
list01 = [1, 2, 1, 4, 2, 6, 1]
print(list01.index(2))
#当寻找元素不存在时,会发生异常
print(list01.index(5))
运行结果:
统计元素
语法格式:seq.count(x)
#统计元素
list01 = [1, 2, 1, 4, 2, 6, 1]
print(list01.count(1))
print(list01.count(2))
print(list01.count(6))
运行结果:
3.包括类型
字符串,列表,元组,集合,字典
二.列表
1.创建
方法一:通过[ ] 进行创建
#空列表
list01 = []
#非空列表
list02 = [1, 2, 3]
#列表中可以是不同类型的数据
list02 = [1, 'hello', [5, 6, 6]]
方法二:通过list()函数创建
#空列表
list01 = list()
print(list01)
#字符串
list02 = list('python')
print(list02)
#将元组转换为列表
#list()转换函数
list03 = list(('1', 'hello', [5, 6, 6]))
print(list03)
#range对象转换
list04 = list(range(0, 15, 2))
print(list04)
运行结果:
2.增
方法一:append( )
语法格式:list01.append( x)
在列表末尾添加元素x
list01 = [1, 2, 3]
list01.append(4) #该操作无返回值
print(list01)
运行结果:
方法二:extend()
语法格式:list01.extend(seq)
在列表末尾添加序列seq
list01 = [1, 2, 3]
list02 = [4, 5, 6]
list01.extend(list01)
print(list01)
list02.extend(list01)
print(list02)
运行结果:
方法三:insert()
语法格式:list01.insert(i , x)
在列表第i位添加元素x
list01 = [1, 2, 3]
list01.insert(2,5)
print(list01)
运行结果:
3.删
方法一:pop()
语法格式:list01.pop([ i ])
删除第 i 位元素
list01 = [1, 2, 3, 4, 5, 6]
#默认删除最后一个元素
list01.pop()
print(list01)
#删除索引为i的元素
list02 = [1, 2, 3, 4, 5, 6]
list02.pop(3)
print(list02)
运行结果:
方法二:remove()
语法格式:list01.remove(x)
删除列表中第一个为 x 的元素
list01 = [1, 2, 1, 4, 2, 6, 1]
list01.remove(1)
print(list01)
运行结果:
方法三:del
del()可以删除索引,切片,整个列表的内容
# 删除整个列表
list1 = [1, 2, 3, 4, 5, 6]
del list1
print(list1)
运行结果: 表明 list1已经完全被删除了
#删除某个元素
list2 = [1, 2, 3, 4, 5, 6]
del list2[3]
print(list2)
#删除切片
list3 = [1, 2, 3, 4, 5, 6]
del list3[1:2]
print(list3)
运行结果:
4.改
列表[索引]= ?
#替换索引位置
list1 = [1, 2, 3, 4, 5, 6]
list1[0] = 9
print(list1)
#替换切片位置
list2 = [1, 2, 3, 4, 5, 6]
list3 = [9,]
list2[2:5] = list3
print(list2)
运行结果:
注意的点:切片换切片,实在想换,把其写成序列格式
#错误示范
list4 = [1, 2, 3, 4, 5, 6]
list5 = 8
list4[2:5] = list5
print(list4)
#正确示范
list4 = [1, 2, 3, 4, 5, 6]
list5 = [8,]
list4[2:5] = list5
print(list4)
运行结果:
5.遍历
for循环遍历
使用for循环遍历
#采用for循环遍历列表
list1 = [1, 2, 3, 4, 5, 6]
for elem in list1:
print(elem,end = ' ')
运行结果:
使用for循环遍历(采用下标的方法)
#采用下标和for循环遍历列表
#对list1进行操作
list1 = [1, 2, 3, 4, 5, 6]
for i in range(0,len(list1)):
list1[i] = list1[i]+10
print(list1)
#对elem进行操作,不对list1进行操作
list1 = [1, 2, 3, 4, 5, 6]
for elem in list1:
elem += 10
print(list1)
运行结果:
while循环遍历
#采用while循环进行遍历
list1 = [1, 2, 3, 4, 5, 6]
i = 0
while i < len(list1):
print(list1[i])
i += 1
运行结果:
range函数索引遍历
#采用range循环进行遍历
list01 = ['唐僧', '孙悟空', '猪八戒', '沙僧', '黑熊怪', '女儿国国王']
for i in range(len(list01)):
print(f'索引为{i}的元素是{list01[i]}')
运行结果:
enumerate()函数遍历
语法格式:enumerate(index, value)
#使用enumerate函数
list01 = ['唐僧', '孙悟空', '猪八戒', '沙僧', '黑熊怪', '女儿国国王']
for index,value in enumerate(list01):
print(f'索引为{index}的元素是{value}')
运行结果同上range函数的运行结果
6.排序
sort()方法和sorted()函数
进行排序操作
sort方法语法格式:list.sort()
sorted()函数语法格式:sorted(iterable, key = None, reverse = False)
iterable:可迭代对象
reverse:指定排序规则,True为降序,False为升序,默认为False
#sort方法
year = [2009, 2004, 2019, 2095, 2035]
year.sort()
print(year)
#方法要依赖与对象或类才能存在
#sorted()函数
year = [2009, 2004, 2019, 2095, 2035]
print(sorted(year))
#函数可以独立存在
二者运行结果:
7.列表推导式
语法格式:list = [ f(x) for x in iterable if condition ]
#一个条件
#获取偶数
numbers1 = [x for x in range(1,10)if x % 2 == 0]
print(numbers1,end=' ')
#两个条件
#获取偶数并对偶数乘2
numbers2 = [x*2 for x in range(1,10)if x % 2 == 0]
print(numbers2,end=' ')
运行结果:
要添加else条件时,必须重新排列,这关系到列表理解元素的顺序
#多个条件
#看以下代码
numbers = []
for x in range(10):
if 2< x < 5:
numbers.append(x * 2)
elif x <= 2:
numbers.append(x * 3)
else :
numbers.append(x * 4)
print(numbers)
采用列表推导式会更加简单
#采用列表推导式
numbers = [2*x if 2<x<5 else 3*x if x<= 2 else 4*x for x in range(10)]
print(numbers)
二者运行结果一样
8.在序列中能进行的基本操作在列表中都可以进行
在此不进行过多举例
三.元组
1.在序列中能进行的基本操作在元组中都可以进行
创建
用逗号隔开即可创建一个元组
major_character1 = '唐僧', '孙悟空', '猪八戒', '沙僧'
更常见的创建方法是用()
major_character2 = ('唐僧', '孙悟空', '猪八戒', '沙僧')
当元组只有一个元素时,要加逗号,
major_character3 = (1,)
major_character4 = (1)
print(major_character3)
print(major_character4)
运行结果:
其余方法同开篇提到的序列一致,遍历方法同list相似
2.元组不能修改
major_character1 = ('唐僧', '孙悟空', '猪八戒', '沙僧')
print(major_character1[2])
print(major_character1[2]==2) #判断是否为2
print(major_character1[2]=2) #会出现红色下划线
如下图所示:
运行代码会出错:
3.列表与元组区别
列表是可变序列,可以进行增删改,列表更为灵活
元组是不可变序列,不能进行元素的增删改操作
元组的重要性:
1.元组相较于列表访问速度和处理速度更快
2.可以作为字典里的键进行使用,列表则不行