Python3之字符串str、列表list、元组tuple的切片操作

切片操作slice

首先要明确一点:字符串和元组是不可变的可迭代对象,列表是可变的可迭代对象
对于可变不可变,就引起了能否赋值的问题
例如:

>>> s = [1,2,3]  # 列表  可变
>>> s[0] = 100
>>> s
[100, 2, 3]

>>> a = (1,2,3)  # 元组  不可变
>>> a[0]
1
>>> a[0]=100
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    a[0]=100
TypeError: 'tuple' object does not support item assignment

>>> b = 'helloworld'  # 字符串  不可变
>>> b[0]
'h'
>>> b[0]=k
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    b[0]=k
NameError: name 'k' is not defined

以上是索引赋值,索引都不能赋值的,切片就也不能赋值了,好了,进入正题吧

切片的定义

从序列中取出相应的元素重新组合成一个新的序列

语法

s[(开始索引b):(结束索引e):(步长s)]

说明

  1. 切片切下的位置:0 代表第一个元素,-1代表最后一个元素
  2. 结束索引是切片的终止索引(但不包括终止点)
  3. 步长是切片每次获取完当前元素后移动的偏移量
    3.1. 步长默认为 1
    3.2. 当步长是正数时,取正向切片,开始索引默认为 0 ,结束索引为最后一个元素的下一个位置
    3.3. 当步长为负数时,取反向切片,开始默认为最后一个,结束位置是第一个的前一个

举个栗子:

>>> s = 'helloworld'
>>> s[2]
'l'
>>> s[2:3]  # 索引从2开始,到3的前一个结束
'l'
>>> s[0:5:2]
'hlo'
>>> s[0:5:-2]  # 为什么呢? 步长为负,开始索引必须大于终止索引才有数据让我们切啊!!
''
>>> s[5:0:-2]
'wle'

>>> s = [1,2,3,4,56,7]
>>> s[2::2]
[3, 56]

>>> s = (1,2,3,4,5,6)
>>> s[2::2]
(3, 5)

切片赋值

切片赋值只对可变序列有效,即只有列表了
举个栗子:

# 此示例示意字符串的切片赋值
>>> s = 'hello world'
>>> s[1:2] = 'w'
Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    s[1:2] = 'w'
TypeError: 'str' object does not support item assignment

很明显,失败了

# 此示例示意元组的切片赋值
>>> s = (1,2,3,5,6,3)
>>> s[1:2]=123
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    s[1:2]=123
TypeError: 'tuple' object does not support item assignment

我们不难发现,错误信息和字符串是相同的,再看列表怎么样

>>> s = [1,2,3,4,5,6]
>>> s[1:2]=100  # 看报错信息是让赋值可迭代对象,但字符串和元组直接就是不让赋值
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    s[1:2]=100
TypeError: can only assign an iterable
>>> s[1:2]=[100000]
>>> s
[1, 100000, 3, 4, 5, 6]
在列表开始位置插入数据
>>> s = [1,2,3]
>>> s[0:0]=[123]
>>> s
[123, 1, 2, 3]

如果是[0:1]会是什么效果呢?

>>> s = [1,2,3]
>>> s[0:1]=[123]
>>> s
[123, 2, 3]

这样就把索引为 0 的元素给替换掉了

在指定索引处插入数据
>>> s = [1,2,3]
>>> s[1:1] = [222222]  # 在索引为  1  的位置插入数据
>>> s
[1, 222222, 2, 3]
在最后插入数据
>>> s = [1,2,3]
>>> s[len(s):] = [111]
>>> s
[1, 2, 3, 111]

因为我们不知道这个列表到底有多长,可以先计算其长度,再赋值

本节完

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秒不可闫M先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值