序列
序列是一个用于存储多个值的连续空间,每个值都对应一个整数的编号,称为索引
序列结构主要有列表,元组,集合,字典和字符串
索引
正向递增索引,取值范围[0,N-1]
反向递减索引,取值范围[-1,-N]
1.序列相关操作
(1)切片操作
切片操作是访问序列元素的另一种方法,它可以访问一定范围内的元素。通过切片操作可以生成一共新的序列。
语法结构:
序列[strat:end:step]
start:表示切片的开始位置(包括开始位置),如果不指定,默认为0;
end:表示切片的结束位置(不包括结束位置),如果不指定,默认为序列的长度;
step:表示步长,如果省略,默认为1,当省略步长时,最后一个冒号可以省略;
步长就是每n个截一个,无论正负就是从左边开始,第一个就截,序列[::-1]是把序列颠倒
(2)序列相加
使用“+”实现两个同类型序列的相加操作,不会去除重复元素
注意事项:
序列的类型要求是相同的,但是序列中元素的类型可以是不用的
(3)序列相乘:
使用数字n乘以一个序列,将生成一个新的序列,新序列中的内容会被重复n次
2.列表
列表由一系列的按特定顺序排列的元素组成,是Python中内置的可变序列,使用[]定义列表,元素之间使用逗号分隔;元素可以是任意的数据类型
(1)创建列表
使用[]直接创建列表
列表名=[element1, element2, …… , elementN]
使用内置方法list()创建列表
列表名 = list(序列)
嵌套列表取值
# 嵌套列表
lst = [[1, 2, 3], [4, 5, 6]]
# 取嵌套索引的值是先按下标找到对应列表然后再用下标索引找到里面的值
print(lst[1][1]) # 5
# 直接使用[]创建
lst = ['hello', 'world', 99]
print('lst: ', lst)
# 使用内置函数list()函数创建列表
lst2 = list('hello') #这个是把序列的每个字符都变成列表的元素
print('lst2:', lst2)
lst3 = list(range(1, 10, 2)) #range函数也可以设置步长,表示从1开始到10结束(不包含10),步长为2
print('lst3: ', lst3)
结果如下
删除列表
del 列表名
列表是序列的一种,对序列操作的运算符,操作符,函数都适用
具体如图所示
(2)遍历列表元素
使用遍历循环for
遍历循环for与range()函数和len()函数组合遍历
遍历循环for与enumerate()函数组合遍历元素和索引
for index, item in enumerate(lst):
输出index和item
index: 可保存元素的索引,但是是可改变的,
item:用于保存元素值
代码如下:
lst = ['hello', 'world', 'python', 'hh']
# 只能打印元素
for i in lst:
print(i)
# 遍历循环for与range()函数和len()函数组合遍历
for i in range(len(lst)):
print(i, lst[i])
# 遍历循环for与enumerate()函数组合遍历元素和索引
# enumerate函数的第二个参数可以改变开始的索引, 写了10,就从10开始,不写默认是从0开始
for index, item in enumerate(lst, 10):
print(index, item)
(3)列表相关操作
修改列表,列表的地址不会变
列表中添加新的容器用extend(),用这个添加多个元素
删除元素
(4)列表排序
1)列表对象的sort()方法
对原列表中的元素进行排序,排序之后的原列表中元素的顺序将发生改变
lst.sort(key=None, reverse = False)
reverse默认是False, sort默认是升序排列,当reverse为True时,sort是降序排列, 如果对字母排序如果要忽略大小写,可以写lst.sort(key = str.lower)
2)内置的sorted()函数
使用sorted()函数排序后,原列表元素顺序不变,排序后产生一个新的列表对象
sorted(iterable, key = None, reverse = False)
排序如果要忽略大小写,可以写lst.sorted(key = str.lower)
(5)列表生成式
生成指定范围的数值列表
lst = [expression for item in range]
从列表中选择符合条件的元素组成新的列表
lst = [expression for item in 列表 if condition]
代码如下:
import random
lst1 = [item for item in range(1, 11)]
print(lst1)
# for前面的就是列表中的元素
lst2 = [item*item for item in range(1, 11)]
print(lst2)
# 如果列表中的元素和循环的item没有关系,item可以用_代替
# 这样就随机生成了九个数
lst3 = [random.randint(1, 100) for _ in range(1, 10)]
print(lst3)
# 从列表中选择符合条件的元素组成新的列表
lst4 = [item for item in range(1, 11) if item % 2 == 0]
print(lst4)
结果如下:
3.二维列表
由行和列组成
生成一个四行五列的二维列表
lst = [[j for j in range(5)] for i in range(4)]
遍历 for row in 二维列表:
for item in row
4.元组
由一系列按特定顺序排列的元素组成;python中的不可变序列;使用()定义,元素之间使用逗号分隔;元组中的元素可以是任意数据类型
(1)元组的创建:
使用()直接创建元组;使用内置函数tuple()创建元组
(2)元组的删除:
del 元组名
注意:如果元组只有一个元素的时候,后面的逗号不能省略,否则数据类型就是元组类型
(3)元组的访问与遍历
t = ('hello', 'world', 'python')
print(t[0]) # 根据索引访问
t2 = t[0:3:2] # 元组支持切片操作
print(t2)
# 元组的遍历
for item in t:
print(item)
# for+range()+len()组合遍历
for i in range(len(t)):
print(i, t[i])
# 使用enumerate()
for index, item in enumerate(t):
print(index, item)
(4)元组生成式
被遍历后的生成器对象内就没有值了,转成元组就是空元组
# 结果是一个生成器对象,打印不能之间看到结果
t = (i for i in range(1, 4))
print(t)
# 需要把t转换成元组才能看
# t = tuple(t)
# print(t)
# 生成器对象不转换成元组可以直接使用for遍历
# for 遍历生成器对象后,生成器就会变成空
for i in t:
print()
print(tuple(t)) # 遍历后是空元组
# __next__()也可以直接访问生成器对象,是把元组里的第一个元素取出,
# 把所有元素取出后,就会剩下一个空元组
# 元组上没有__next__()方法,只有生成器对象才有
# print(t.__next__())
# print(t.__next__())
print(t.__next__())
print(tuple(t)) # 值都取出后是空元组
5.元组和列表的区别