python:切片

为什么切片和区间会忽略最后一个元素

在切片和区间里不包含区间范围的最后一个元素是python的风格,符合其他语言里以0作为下标的传统,这样做得好处如下

  • 当起止位置信息都可见时,我们可以快速计算出切片和区间的长度,用最后一个数减去第一个下标即可(stop-start)

栗子:

a = [1, 2, 3, 4]
print(a[0:2])

取的1、2 ;长度就是 2-0,也就是 2,这里的长度就是print(len(a[0:2]));运行的结果如下

F:\project_gitee\Test>D:/Python/Python37/python.exe f:/project_gitee/Test/pythonScripts/python_tuple.py
[1, 2]
2
  • 也可以利用任意一个下标来把序列分割成不重叠的两个部分

栗子:

a = [1, 2, 3, 4]
print(a[:2])
print(a[2:])

指定终止点和起点,运行的结果如下

F:\project_gitee\Test>D:/Python/Python37/python.exe f:/project_gitee/Test/pythonScripts/python_tuple.py
[1, 2]
[3, 4]

对对象进行切片

可以使用 “ s[a:b:c] ” 的形式对对象中在a和b之间以c为间隔取值。c也可以为负数,负数就意味着反向取值。c也可以直接理解为步长

栗子:

s = 'class_number'

print(s[:])     # 取全部值,栗子:s[:]、s[::]
print(s[:2])    # 取两个
print(s[3::])   # 从第三个开始取到最后
print(s[::3])   # 间隔两个取值
print(s[::-1])  # 反向取全部
print(s[::-2])  # 反向间隔一个取值

指定切片取值,运行的结果如下

F:\project_gitee\Test>D:/Python/Python37/python.exe f:/project_gitee/Test/pythonScripts/python_tuple.py
class_number
cl
ss_number
csnb
rebmun_ssalc
rbu_sl

a:b:c这种用法只能作为索引或者下标在 [] 中来返回一个切片对象。

 

给切片赋值

如果把切片放在赋值语句的左边,或者把它作为del操作的对象,就可以对序列进行嫁接、切除或者就地修改等操作

栗子:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
a[2:5] = [20, 30]
print(a)


del a[5:7]
print(a)


a[3::2] = [11, 22]
print(a) 

切片赋值后的运行结果如下

F:\project_gitee\Test>D:/Python/Python37/python.exe f:/project_gitee/Test/pythonScripts/python_tuple.py
[1, 2, 20, 30, 6, 7, 8, 9]
[1, 2, 20, 30, 6, 9]
[1, 2, 20, 11, 6, 22]

如果赋值的对象是一个切片,那么赋值语句的右侧必须是一个可迭代对象。即便只有一个值,也要把它转换成可迭代序列

栗子:

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]

a[2:5] = 100
print(a)

切片赋值运行后的结果如下

F:\project_gitee\Test>D:/Python/Python37/python.exe f:/project_gitee/Test/pythonScripts/python_tuple.py
Traceback (most recent call last):
  File "f:/project_gitee/Test/pythonScripts/python_tuple.py", line 94, in <module>
    a[2:5] = 100
TypeError: can only assign an iterable

上述中报错:TypeError: can only assign an iterable;字面意思就是只能分配一个可迭代对象

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]

a[2:5] = '100'
print(a)

整形修改为可迭代对象运行后的结果如下

F:\project_gitee\Test>D:/Python/Python37/python.exe f:/project_gitee/Test/pythonScripts/python_tuple.py
[1, 2, '1', '0', '0', 6, 7, 8, 9]

多维切片和省略

[] 里使用逗号分开多个索引或者切片、省略号;多用于二维、三维、四维矩阵数据操作,NumPy库就可以进行操作。

import numpy as np

arr = np.arange(12).reshape(2, 2, 3)
print(arr[:, ::2, :])

print(arr[..., 0])

多维切片和省略的运行结果如下

F:\project_gitee\Test>D:/Python/Python37/python.exe f:/project_gitee/Test/pythonScripts/python_tuple.py
[[[0 1 2]]

 [[6 7 8]]]
[[0 3]
 [6 9]]

多维和省略牵扯到第三方库的操作,具体使用还得可自行百度......

在python里的列表(list)、元组(tuple)、字符串(str)等序列类型都可进行切片操作......

 

以上总结或许能帮助到你,或许帮助不到你,但还是希望能帮助到你,如有疑问、歧义,评论区留言会及时修正发布,谢谢!


未完,待续…

一直都在努力,希望您也是!

 

 

 

 

 

Python中,切片(slice)是一种高级索引方法,用于从序列对象(如list, string, tuple)中取出一个范围对应的元素。它通过指定起始位置、结束位置和步长来实现对序列的切割操作。 切片的索引方式可以使用冒号来表示范围,起始位置和结束位置都可以省略。例如,对于一个元组t=(1,2,3,4,5),可以使用t[1:3]来获取索引为1到索引为2的元素,即(2,3)。同样地,对于一个字符串s="ACDRF",可以使用s[1:3]来获取索引为1到索引为2的字符,即"CD"。 除了基本的序列类型,切片操作还可以应用于其他对象。比如,可以对元组进行切片操作,例如(0, 1, 2, 3, 4, 5)[:3]将返回(0, 1, 2)。还可以在for循环中使用切片操作,比如for i in range(0,100)[2::3][-10:]可以从列表中取出从第二位开始,步长为3的元素,并从倒数第10位开始取10个元素。 切片操作的详细切法有以下几个参数:start表示切片的起始位置,默认为序列的开头;end表示切片的结束位置,但不包含该位置的元素,如果没有指定则表示切割到序列的结束;step表示步长,默认值为1,如果步长为正数,则表示从左往右取元素,如果为负数,则表示从右往左取元素。 综上所述,Python中的切片操作可以实现对序列对象的灵活切割,通过指定起始位置、结束位置和步长来获取所需的元素范围。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python中的切片(详细篇)学起来喔](https://blog.csdn.net/Zombie_QP/article/details/125063501)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值