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]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值