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 
    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:切片_第1张图片

 

 

 

 

 

你可能感兴趣的:(python,python,切片)