美文网首页Python大数据与SQL优化笔记
Python基础-不一样的切片操作

Python基础-不一样的切片操作

作者: 南山烟雨天 | 来源:发表于2019-04-28 17:11 被阅读3次

Python切片操作是Python中从列表,字符串等某个序列对象中抽取部分值的情况下使用的方法,首先我们要知道序列对象包括哪些类型。

序列:字符、列表、元组   

  所有序列都支持迭代,序列表示索引为非负整数的有序对象集合,字符和元组属于不可变序列,列表可变。

Python切片操作的一般方式

一个完整的切片表达式包含两个“:”,用于分隔三个参数(start_index、end_index、step),当只有一个“:”时,默认第三个参数step=1。

切片操作基本表达式:object[start_index:end_index:step]

step:正负数均可,其绝对值大小决定了切取数据时的‘‘步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以增量1取值。“切取方向非常重要!

start_index:表示起始索引(包含该索引本身);该参数省略时,表示从对象“端点”开始取值,至于是从“起点”还是从“终点”开始,则由step参数的正负决定,step为正从“起点”开始,为负从“终点”开始。

end_index:表示终止索引(不包含该索引本身);该参数省略时,表示一直取到数据“端点”,至于是到“起点”还是到“终点”,同样由step参数的正负决定,step为正时直到“终点”,为负时直到“起点”。

下面说下实际的使用案例,以列表为例子:

list_slice=['alex','peter','leo','simon']

取单个书

print(list_slice[0])

['alex']

取整个列表

print(list_slice[::])

['alex', 'peter', 'leo', 'simon']

取前三个元素

print(list_slice[0:3])  ##start_index从0开始,左包右不包,就是0,1,2 不包括3

print(list_slice[-4:-1:1])

['alex', 'peter', 'leo']

倒序取数

print(list_slice[0:3:-1]) ##start_index, end_index是0-3,是说从左向右取,但是step=-1是从右到左取,相互矛盾

[]

print(list_slice[::-1])##倒序整个list

print(list_slice[3::-1]) ##倒序整个list

['simon', 'leo', 'peter', 'alex']

print(list_slice[3:0:-1]) ##取后三个元素 start_index=3, end_index=0(但是不包括),左包右不包

print(list_slice[-1:-4:-1]) ##取后三个元素, start_index, end_index可以用负号来表示元素

['simon', 'leo', 'peter']

连续切片

print(list_slice[0:4][0:2]) ##理论上可以无数次切片

['alex', 'peter']

嵌套列表的切片

list_list_slice=['alex','peter',['a','b','c'],'leo','simon']

print(list_list_slice[2][0:2])

['a', 'b']

切片的三个参数可以用表达式,如

a[2+1:3*2:7%3]

[3, 4, 5]

等价于 a[2+1:3*2:7%3] = a[3:6:1]

切片range的案例

for i in range(1,100)[2::3][-10:]: 

       print(i)

就是利用range函数生成1-99的整数,然后取3的倍数,再取最后十个。

用切片来修改list

list_slice[0:2] =['x','y']

print(list_slice)

['x', 'y', 'leo', 'simon']

list_slice[0] =['x','y']

print(list_slice)

[['x', 'y'], 'y', 'leo', 'simon']

字符串,元组的切片操作和列表类似

(一)start_index、end_index、step可同为正、同为负,也可正负混合使用。但必须遵循一个原则,否则无法正确切取到数据:当start_index的位置在end_index的左边时,表示从左往右取值,此时step必须是正数(同样表示从左往右);当start_index的位置在end_index的右边时,表示从右往左取值,此时step必须是负数(同样表示从右往左),即两者的取值顺序必须是相同的。对于特殊情况,当start_index或end_index省略时,起始索引和终止索引由step的正负来决定,不会存在取值方向出现矛盾的情况(即不会返回空列表[]),但正和负取到的结果是完全不同的,因为一个向左一个向右。

(二)在利用切片时,step的正负是必须要考虑的,尤其是当step省略时。比如a[-1:],很容易就误认为是从“终点”开始一直取到“起点”,即a[-1:]= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],但实际上a[-1:]=a[-1]=9,原因在于step=1表示从左往右取值,而起始索引start_index=-1本身就是对象的最右边的元素了,再往右已经没数据了,因此只有a[-1]一个元素。

相关文章

  • NumPy库(二)- 索引和切片

    1. 基础知识 ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作...

  • 高级特性

    1. 切片 Python提供了切片(Slice)操作符: ============================...

  • Python基础-不一样的切片操作

    Python切片操作是Python中从列表,字符串等某个序列对象中抽取部分值的情况下使用的方法,首先我们要知道序列...

  • [python基础]-10 高级特性-切片操作

    1.切片操作(slice) 在python中可以对字符串、列表、元祖三种数据类型进行切片(slice)操作,切片的...

  • Python高级特性-1

    切片(Slice) 对经常取指定索引范围的操作,需要用循环的操作,Python提供了切片(Slice)操作符,能大...

  • 高级特性

    1.切片(Slice)# python提供了切片(Slice)操作符,能大大简化取数据操作L = ['aa','b...

  • python的高级特性

    在python中,代码是越少越好,越简单越好。因此就有了python常用的高级特性。 切片(Slice)切片操作符...

  • go和python切片的不同

    go有切片slice类型,python有列表和元组,这两种语言都有切片操作。但是它们的切片操作是完全不同的。首先说...

  • python学习笔记

    切片 取一个list(列表)或tuple(元组)的部分元素是非常常见的操作Python提供了切片(Slice)操作...

  • 我的笔记4.9:慕课网python入门-廖雪峰

    对list进行切片 对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作...

网友评论

    本文标题:Python基础-不一样的切片操作

    本文链接:https://www.haomeiwen.com/subject/lljjnqtx.html