python切片操作
引用文章:彻底搞懂Python切片操作
序列类型反转操作
reversed(sequence)
在经过reversed()的作用之后,返回的是一个把序列值经过反转之后的迭代器,不改变原始数据类型
# 1.列表的反转:
>>> bb = [1,3,5,7]
>>> list(reversed(bb))
[7, 5, 3, 1]
# 2.元组的反转:
>>> aa = (1, 2, 3)
>>> tuple(reversed(aa))
(3, 2, 1)
# 3.字符串的反转
>>> ss = "qwer1234"
>>> ''.join(reversed(ss))
'4321rewq'
列表方法reverse()
适用反转列表本身,是将原始列表改变了
>>> l=[1,2,3,4,5]
>>> l.reverse() # l.reverse() 这一步操作的返回值是一个None,是将原始列表改变了
>>> l
[5, 4, 3, 2, 1]
切片sequence[::-1]
利用切片sequence[::-1],切片步长为负数,从后面往前面取值,相当于反转
# 1.列表的反转:
>>> bb = [1,3,5,7]
>>> bb[::-1]
[7, 5, 3, 1]
# 2.元组的反转:
>>> aa = (1, 2, 3)
>>> aa[::-1]
(3, 2, 1)
# 3.字符串的反转
>>> ss = "qwer1234"
>>> ss[::-1]
'4321rewq'
切片与列表
浅拷贝
需要注意的是: [:]和.copy()都属于“浅拷贝”,只拷贝最外层元素,内层嵌套元素则通过引用方式共享,而非独立分配内存,如果需要彻底拷贝则需采用“深拷贝”方式
>>> L=[1,2,3,4,5]
>>> L1=L.copy()
>>> L2=L[:]
>>> L1
[1, 2, 3, 4, 5]
>>> L2
[1, 2, 3, 4, 5]
>>> id(L)
1690857536584
>>> id(L1)
1690858287752
>>> id(L2)
1690857550152
>>>
修改单个元素
>>> L[0]=9
>>> L
[9, 2, 3, 4, 5]
添加元素
1.在指定位置插入
>>> L.insert(0,1) #头部插入
>>> L.insert(len(L)), 11) # 尾部插入
# 切片:
>>> L[:0]=[8] #头部插入
>>> L[len(L):]=[25,19] # 尾部插入
# append:追加元素
>>> L.append(12)
# extend:合并列表元素
>>> L.extend([16])
# 运算符
>> L=[4, 11, 10, 12, 16, 25]
>>> L+[5] # +的元素只能为列表,此操作不改变原列表,生成新列表
[4, 11, 10, 12, 16, 25, 5]
>>> L*2 # 列表元素翻倍:此操作不改变原列表,生成新列表
[4, 11, 10, 12, 16, 25, 4, 11, 10, 12, 16, 25]
替换部分元素
>>> L[1:3]=[4]
>>> L
[8, 4, 2, 3, 4, 5, 11, 10, 12, 16, 25, 19]
删除元素
# 从尾部开始删除
>>> L.pop()
19
>>> L
[8, 4, 2, 3, 4, 5, 11, 10, 12, 16, 25]
# 指定下标删除
>>> L.pop(0)
8
>>> L
[4, 2, 3, 4, 5, 11, 10, 12, 16, 25]
# 删除列表中的元素
>>> L.remove(2)
>>> L
[4, 3, 4, 5, 11, 10, 12, 16, 25]
# 切片:删除部分元素
>>> L[1:3]=[]
>>> L
[4, 5, 11, 10, 12, 16, 25]
# 指定下表删除
>>> del L[1]
>>> L
[4, 11, 10, 12, 16, 25]
清空列表
>>>L=[5, 11, 10, 12, 16, 25]
>>> L.clear()
>>> L
[]
# 切片:清空列表
>>> L[:]=[]
>>> L
[]
取10以内的偶数
# 正常思维:先构造迭代器,再遍历出元素,再筛选出结果
>>> list(range(10))[::2]
[0, 2, 4, 6, 8]
# 对迭代器进行切片
>>> list(range(10)[0::2])
[0, 2, 4, 6, 8]
# 速度最快:通过参数构造特殊的迭代器
>>> list(range(0,10,2))
[0, 2, 4, 6, 8]
取10以内的奇数
# 正常思维:先构造迭代器,再遍历出元素,再筛选出结果
>>> list(range(10))[1::2]
[1, 3, 5, 7, 9]
# 对迭代器进行切片
>>> list(range(10)[1::2])
[1, 3, 5, 7, 9]
# 速度最快:通过参数构造特殊的迭代器
>>> list(range(1,10,2))
[1, 3, 5, 7, 9]
取10以内3的倍数
# 正常思维:先构造迭代器,再遍历出元素,再筛选出结果
>>> list(range(10))[3::3]
[3, 6, 9]
# 对迭代器进行切片
>>> list(range(10)[3::3])
[3, 6, 9]
# 速度最快:通过参数构造特殊的迭代器(range可以指定开始、结束位置、迭代步长)
>>> list(range(3,10,3))
[3, 6, 9]