切片
Python中符合序列的有序序列都支持切片(slice),例如列表,字符串,元组。
格式:【start:end:step】
start:起始索引,从0开始,-1表示结束
end:结束索引(切片的结果不包含结束索引)
step:步长,end-start,步长为正时,从左向右取值。步长为负时,反向取值
实例
list=['a','b','c','d','e','f','g','h','i','j','k']
print(f'1.{list[5:10:1]}') #从位置5开始,每次增加1截取,不包含结束索引
print(f'2.{list[5::-1]}') #反向取值
print(f'3.{list[:3]}') #省略起始位置的索引,以及步长。默认起始位置从头开始,默认步长为1,结束位置索引为3
print(f'4.{list[3:]}') #省略结束位置的索引,以及步长,默认步长为1,截取剩余元素
运行结果
1.['f', 'g', 'h', 'i', 'j']
2.['f', 'e', 'd', 'c', 'b', 'a']
3.['a', 'b', 'c']
4.['d', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
插入元素
insert方法用于在列表中插入一个元素,而append方法用于在列表的末尾追加一个元素
实例
list=['a','b','c','d','e','f','g','h','i','j','k']
list.insert(2,'小明')
print(list)
list.append('旺财')
print(list)
运行结果
['a', 'b', '小明', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
['a', 'b', '小明', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', '旺财']
修改元素
实例
list=['a','b','c','d','e','f','g','h','i','j','k']
list[0]='小明'
print('第一次修改',list)
list[0:2]=['旺','财']
print('第二次修改',list)
运行结果
第一次修改 ['小明', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
第二次修改 ['旺', '财', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
删除
list.remove(x) 从列表中删除第一个次出现在列表中的值
del语句 del 序列[整数表达式],del 序列[切片]
list.pop([index]) 删除索引对应的元素,如果不加索引,默认删除最后元素,同时返回移除元素
实例
list=['a','b','c','d','e','f','g','h','i','j','k']
list.remove('a')
print('第一次删除后',list)
del list[0]
print('第二次删除后',list)
del list[0:2]
print('第三次删除后',list)
c=list.pop(0)
print('第四次删除后',list,f'删除的元素为{c}')
d=list.pop()
print('第五次删除后',list,f'删除的元素为{d}')
运行结果
第一次删除后 ['b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
第二次删除后 ['c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
第三次删除后 ['e', 'f', 'g', 'h', 'i', 'j', 'k']
第四次删除后 ['f', 'g', 'h', 'i', 'j', 'k'] 删除的元素为e
第五次删除后 ['f', 'g', 'h', 'i', 'j'] 删除的元素为k
列表中其他操作
count count 方法统计某个元素在列表中出现的次数
实例
list=['a','b','c','a','e','a','g','h','i','j','k']
print('列表中a的数量为:',list.count('a'))
运行结果
列表中a的数量为: 3
extend extend 方法可以在列表的末尾一次性追加另一个可迭代对象的多个值,单个字符也是可迭代对象(例如:'a')
实例
a=[1,2,3]
b=[4,5,6]
print(f'连接操作"+"会返回新的列表:{a+b}')
print(f'列表a为{a}')
a.extend(b)
print(f'entend只修改被扩展的列表:扩展后的列表a为{a}')
运行结果
连接操作"+"会返回新的列表:[1, 2, 3, 4, 5, 6]
列表a为[1, 2, 3]
entend只修改被扩展的列表:扩展后的列表a为[1, 2, 3, 4, 5, 6]
index index 方法用于从列表中找出某个值第一个匹配项的索引位置
实例
list=['a','b','c','a','e','a','g','h','i','j','k']
print(list.index('a')) #不输入查找范围,默认从头查找
print(list.index('a',4,9)) #查找列表中位置在4-9之间元素的位置,不存在所查找元素时报错
运行结果
0
5
reverse 将列表中的元素反转
实例
list=['a','b','c','d','e','f','g','h','i','j','k']
list.reverse()
print(list)
运行结果
['k', 'j', 'i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a']
sort 列表排序
实例
list=[1,3,5,7,8,9,2,4,6]
list.sort(reverse=False) #默认升序排列reverse=False,要想升序排列将False改为True即可
print(list)
运行结果
[1, 2, 3, 4, 5, 6, 7, 8, 9]
列表中变量与内存关系
-
copy的是内存地址,引用的是列表的引用地址,列表里存的是各个元素的地址
-
列表中的元素地址没变,列表中的内存地址也不会发生改变
-
列表中的元素地址发生改变,列表中的内存地址也将改变
实例(浅拷贝)
ps:注意浅拷贝与同义词复制的区别
name1=['a','b','c','d',['e','f','g']]
name2=name1.copy() #浅拷贝
name1[1]='X'
name1[-1][-1]='Z'
print(name1)
print(name2)
print(f'name1中元素Z的内存地址:{id(name1[-1][-1])},元素Z是内存地址:{id("Z")}')
print(f'name2中元素Z的内存地址:{id(name2[-1][-1])}')
运行结果
['a', 'X', 'c', 'd', ['e', 'f', 'Z']]
['a', 'b', 'c', 'd', ['e', 'f', 'Z']]
name1中元素Z的内存地址:1726784480120,元素Z是内存地址:1726784480120
name2中元素Z的内存地址:1726784480120
name2=name1.copy()copy的是name中列表的内存地址
在Python中,copy的是内存地址,引用的是列表的引用地址,列表里存的是各个元素的地址
那么如何将一个嵌套列表完整的copy过来呢(即修改嵌套列表name1中的数据,列表name2中的数据不会变动),我们需要导入一个copy模块
实例
import copy
name1=['a','b','c','d',['e','f','g']]
name2=copy.deepcopy(name1)
name1[1]='X'
name1[-1][-1]='Z' #修改name1中的g元素
print(name1)
print(name2)
运行结果
['a', 'X', 'c', 'd', ['e', 'f', 'Z']]
['a', 'b', 'c', 'd', ['e', 'f', 'g']]