文章目录
序列的索引及切片操作 p42
序列:
一个用于存储多个值的连续空间
每个值都对应一个整数的编号,叫做索引
索引分为:正向递增索引、反向递减索引
序列结构实例:
字符串、
列表、元组、(有序序列)
集合、字典(无序序列)
列表、元组、集合、字典这四个又被称为Python中的组合数据类型
# 使用索引去检索字符串中的元素
# 正向递增索引
s='helloworld'
for i in range(0,len(s)): #len()内置函数获取字符串的长度
print(i,s[i],end='\t\t')
print()
# 逆向递减索引
for i in range(-len(s),0):
print(i,s[i],end='\t\t')
print()
切片操作:
访问序列元素的一种方法
可以用于所有的序列类型
语法结构
序列[start:end:strp]
'''
start:切片的开始索引(包含)
end:切片的结束索引(不包含)
step:步长,默认为1
'''
切片实例:
s='helloworld'
# 切片操作
s1=s[0:5:2]
print(s1)
#省略了开始位置,start默认为0
s1=s[:5:1]
print(s1)
# 省略步长,默认为1
s1=s[0:5:]
print(s1)
# 省略结束位置,默认到最后
s1=s[0::1]
print(s1)
# 这两个等效,都是从5开始
print(s[5::])
print(s[5:])
# 若步长为负数,就是逆序输出,从最后一个索引开始往前打印,补偿绝对值作为步长
print(s[::-1])
print(s[-1:-11:-1])
关注一下步长作为负数的情况
序列的相关操作 p43
序列的相加和相乘操作
# 序列的相加操作
s='hello'
s2='world'
print(s+s2)
# 序列的相乘操作
print(s*5)
序列的其它操作符
操作符/函数 | 描述说明 |
---|---|
x in s | 若x是s的元素,结果为True,否则为False |
x not in s | 与上面反过来 |
len(s) | 序列s中元素的个数(即序列的长度) |
max(s) | 序列s中元素的最大值 |
min(s) | 序列s中元素的最小值 |
s.index(x) | 序列s中第一次出现元素x的值 |
s.count(x) | x在序列s中出现的总次数 |
s='helloworld'
print('e在s中存在吗','e' in s)
print('v在s中存在吗','v' in s)
print('e在s中不存在吗','e' not in s)
print('v在s中不存在吗','v' not in s)
# 关于序列的内置函数的使用
print('len()',len(s))
print('max()',max(s))
print('min()',min(s))
# 序列对象的方法(使用序列的名称,打点调用)
print('s.index(x)',s.index('o')) # 'o'在s中第一次出现的位置
print('s.index(x)',s.index('v')) # 'v'在s中不存在,此时会报错
print('s.count(x)',s.count('o')) # 统计'o'在s中出现的次数
列表的基本操作 p44
一个序列类型
一系列按照特定顺序排列的元素组成
字符串类型、整数类型、浮点数类型都是不可变数据类型
列表是可变数据类型,又叫做可变序列
使用[]
定义列表,元素和元素之间使用英文的逗号分隔
列表中的元素可以是任意的数据类型,元素与元素之间的数据类型可以不一致
列表的创建方式
1、
使用[]
直接创建列表
列表名=[element,element2,...elementN]
2、
使用内置函数list()创建列表
列表名=list(序列)
列表的删除
del 列表名
代码示例
# 列表的创建和删除
# 第一种创建列表的方式
lst=['hello','world',98,100.5]
print(lst)
# 第二种创建列表的方式
lst2=list('helloworld')
print(lst2)
lst3=list(range(1,10,2))
print(lst3)
lst4=list(['1',2,'3'])
print(lst4)
# 列表式序列中的一种,对序列的操作符,运算符,函数均可以使用
print(lst+lst2+lst3)
# 序列的相乘
print(lst*3)
# 求序列的最大最小值
print(max(lst3))
print(min(lst3))
# 统计
print(lst2.count('o'))
# 查找
print(lst2.index('o'))
# 删除列表
del lst4
enumerate函数
for index,item in enumerate(lst):
输出index和item
列表的特有操作 p45
列表的方法 | 描述说明 |
---|---|
lst.append(x) | 在列表lst最后一个元素 |
lst.insert(index,x) | 在列表中第index位置增加一个元素,index从0开始算 |
lst.clear() | 清除列表lst中所有元素 |
lst.pop(index) | 将列表lst中第index位置的元素取出,并从列表中将其删除,index从0开始 |
lst.remove(x) | 将列表lst中出现的第一个元素x删除 |
lst.reverse() | 将列表lst中的元素翻转,注意这个方法是没有返回值的,会反向lst的顺序 |
lst.copy() | 拷贝列表lst中的所有元素,生成一个新的列表 |
代码实例:
lst=['hello','world','python']
print('原列表:',lst)
print('原列表的内存地址:',id(lst))
# 增加元素的操作
lst.append('sql')
print('增加元素之后的列表:',lst)
print('增加元素之后的内存地址:',id(lst))
'''
增加元素后,内存地址没变,所以叫做可变数据类型
元素个数可变但内存地址不变
'''
# 在索引为1的位置插入100这个元素
lst.insert(1,100)
print(lst)
print(id(lst)) # 内存地址还是不变
# pop:先取出待删元素,再删除
print(lst.pop(1))
print(lst)
print(id(lst))
# 列表元素的删除操作
lst.remove('world')
print(lst)
print(id(lst))
# 翻转列表
print(lst)
print(id(lst))
lst.reverse()
print(lst)
print(id(lst))
# 列表的拷贝,会产生新的列表
new_lst=lst.copy()
print(new_lst)
print(id(new_lst))
# 列表元素的修改
print(lst)
print('lst[1]:',lst[1])
lst[1]='888'
print(lst)
# 清除列表中的所有元素
lst.clear()
print(lst)
print(id(lst)) # 内存地址依然没变
列表排序的两种方式:
1、列表对象的sort方式
lst.sort(key=None,reverse=False)
'''
key表示排序的规则
reverse表示排序方式,默认值是False,表示升序;True就是降序
'''
2、内置函数sorted()
注意这个函数是返回新的列表,不会改变原来的列表
sorted(iterable,key=None,reverse=False)
'''
iterable表示是排序的对象
'''
1、
lst=[4,56,2,78]
print('原列表:',lst)
lst.sort();
print('升序:',lst) # 排序是在原列表的基础上进行的,不会产生新的列表对象
lst.sort(reverse=True) # 降序
print('降序:',lst)
print('-'*66)
# 英文单词也可以排序,按照ascii码
lst1=['banana','apple','Cat','Orange']
print('原列表:',lst)
lst.sort();
print('升序:',lst) # 排序是在原列表的基础上进行的,不会产生新的列表对象
lst.sort(reverse=True) # 降序
print('降序:',lst)
print('-'*66)
# 忽略大小写,自己指定规则
lst1.sort(key=str.lower)
print(lst1)
2、
# 用 sorted() 函数会产生新的列表对象
lst=[4,56,3,78,40,56,89]
print('原列表:',lst)
# 排序
# 升序
lst2=sorted(lst) # 产生新的列表对象,默认是升序
print('升序:',lst2)
print('原列表:',lst)
# 降序
lst3=sorted(lst,reverse=True)
print('降序:',lst3)
print('原列表:',lst)
# 忽略大小写进行排序
lst4=['banena','apple','Cat','Orange']
print('原列表:',lst4)
lst5=sorted(lst4,key=str.lower)
print('升序:',lst5)
列表生成式及二维列表 p46
语法结构
lst=[expression for item in range]
lst=[expression for item in range if condition]
代码实例:
# 列表生成式的使用
import random
lst=[item for item in range(1,11)]
print(lst)
lst=[item*item for item in range(1,11)]
print(lst)
lst=[random.randint(1,100) for _ in range(10)]
print(lst)
# 从列表中符合条件的元素组成新的列表
lst=[i for i in range(10) if i%2==0]
print(lst)
二维列表:
for row in 二维列表:
for item in row:
pass
代码实例:
# 二维列表的生成和遍历
# 创建二维列表
lst=[
['城市','环比','同比'],
['北京',102,103],
['上海',104,504],
['深圳',100,39]
]
print(lst)
# 遍历二维列表,使用双层for循环
for row in lst:
for item in row:
print(item,end='\t')
print()
# 列表生成式生成一个二维五列的链表
lst2=[[j for j in range(5)] for i in range(4)]
print(lst2)
元组的创建和删除 p47
Python中内置的不可变序列
使用()
定义元组,元组的元素和元素之间使用英文的逗号分隔
元组中只有一个元素的时候,逗号不能省略
创建和删除
2种创建方式:
1、
使用()
直接创建元组
元组名=(ele1,ele2,...,eleN)
2、
使用内置函数tuple()
创建元组
元组名=tuple(序列)
删除:
del 元组名
代码实例:
# 元组的创建和删除
t=('hello',[10,20,30],'python','world')
print(t)
t=tuple('helloworld')
print(t)
t=tuple([10,20,30,40])
print(t)
print('10在元组中是否存在:',10 in t)
print('10在元组中是否不存在:',10 not in t)
print('元组t的最大值:',max(t))
print('元组t的最小值:',min(t))
print('元组t的元素个数:',len(t))
print('t.index:',t.index(10))
print('t.count:',t.count(10))
# 如果元组中只有一个元素,逗号不能省略,下面省略了t变成int了
t=(10)
print(t)
print(type(t))
y=(10,)
print(y)
print(type(y))
# 元组的删除
del t
print(t) 此时会报错
元组的访问和遍历 p48
# 元组元素的访问
t=('python','hello','world')
print(t[0]) # 索引访问元组
print(t[0:3:2]) # 支持切片操作
# 元组元素的遍历
for item in t:
print(item)
for i in range(len(t)):
print(i,t[i])
for index,item in enumerate(t):
print(index,item)
for index,item in enumerate(t,start=11):
print(index,item)
元组的生成式 p49
元组生成式的结果是一个生成器对象,需要转换成元组或列表才能查看元素内容
生成器对象中二维元素可以使用 __next__()
方法进行获取
# 元组生成式
t=(i for i in range(1,4)) # 这一步只产生了一个生成器对象
print(t)
print(t.__next__()) # 取出1
print(t.__next__()) # 取出2
print(t.__next__()) # 取出3
# 若上面取了三次,那么下面转换成元组,就什么都没有了
t=tuple(t)
print(t)
for item in t:
print(item)
元组和列表的区别
元组 | 列表 |
---|---|
不可变序列 | 可变序列 |
无法实现添加、删除和修改元素等操作 | append() insert() remove() pop() 等方法实现添加和删除列表元素 |
支持切片访问元素,不支持修改操作 | 支持切片访问元素和修改列表中的操作 |
访问和处理速度快 | 访问和处理速度慢 |
可以作为字典的键 | 不能作为字典的键 |