一、切片

 

 通过前面我们所学的,我们知道,对于list和tuple这两种有序的集合,我们是可以通过下标(索引)来对元素进行访问的,比如:

 

python里字典切片 python dict切片_Java

 


 

对于dict来说,我们可以通过get(key)的方式获得对应的value值,比如:

 

python里字典切片 python dict切片_Java_02

 


 

但对于set来说,因为它不是键值对,也不是有序的,所以既无法通过key访问value值,也无法通过索引访问元素值,但是我们可以判断key是否存在,存在了,这个key的值就是我们要的'元素'

 

python里字典切片 python dict切片_Java_03

 


 

温故而知新,做到每天接触新的知识点的同时也不忘之前学到的知识,这样,我们才能真正意义上做到积累!

 

Question:思考一下这个问题,如果我们一次性取出好几个元素如何做到?(这里提到元素了,我们就不考虑dict了,毕竟涉及索引(下标)访问的,只有顺序结构的集合能做到了,因此,我们这里只针对list和tuple)

 

通常,我们取出多个元素,是这样做的(下面讲到切片,我们只针对list来讲,tuple原理一样):

 

python里字典切片 python dict切片_Python_04

 

 

可以看出,如果我们想取出L中的前三个元素,要连续输出第一个元素,第二个元素和第三个元素,如果L中有1000个元素,而我们需要取出第50(索引49)个元素和第61(索引60)个元素之间的11个元素,我们就要连续输出11次,有没有更简便的办法呢,有的!就是我们今天要讲到的切片操作。

 


 

 

二、我们先看一下Java对字符串截取的操作

 

python里字典切片 python dict切片_Python_05

 

 

跟进substring函数看一下:

 

 

python里字典切片 python dict切片_python_06

 

 

 

试一下,第一种情况:

 

 

python里字典切片 python dict切片_Java_07

 

 

我们再来看一下,如何根据subLen【count】计算出新的string对象

 

 

python里字典切片 python dict切片_Java_08

 

 

 

 

 

三、Python的字符串切片【截取】操作

 

python里字典切片 python dict切片_Python_09

 

 

 

功能和Java的substring一样,思路也一样,唯一不同的是,Python的更简洁,重点是支持字符串倒置访问,所以我们还可以以下面的方式得到结果:‘45’

 

 

python里字典切片 python dict切片_python_10

 


 

如果还不明白,我们继续举例

 

python里字典切片 python dict切片_Java_11

 

如果向前推进四个字符 : '3456',我们应该怎么写呢? 很简单,如下

 

python里字典切片 python dict切片_python_12

 


 

区别于Java的substring函数,Java的endIndex必须要比beginIndex的值要大,否则会抛异常

 

python里字典切片 python dict切片_python_13

 

因为Java只支持字符串的正序切分,没法倒着来,因此,有这个限制,但是Python的slice函数却没有

 

 


 

 

如果我们想得到str的奇数字符,怎么办呢(结果是'135'):

 

 

python里字典切片 python dict切片_Python_14

 

解释:不截取,就当前字符串,从第一个字符开始,2个字符一分组,不够的单独分出来,取第一个字符 【字符之间步长等于2】

 


 

反着来一个

 

python里字典切片 python dict切片_Java_15

 

解释:[-6:-1]  倒置截取字符串 ==> "12345" ==>从第一个字符开始, 2个字符一分组,不够的单独分出来,取第一个字符 ==> "135"【字符之间步长等于2】

 

 


 

不过瘾的话,我们再来一个:

 

python里字典切片 python dict切片_字符串_16

 

解释:[1:6]正序截取字符串 ==> "23456' ==>从第一个字符开始,4个字符一分组,不够的单独分出来,取第一个字符 ==>"26"【字符之间步长等于4】

 


 

我们试着,取步长【间隔】等于1的所有字符 == 其实就是字符本身

 

python里字典切片 python dict切片_字符串_17

 


 

取等于2的步长,结合上面所讲,不用想,直接给出答案:"ace"

 

python里字典切片 python dict切片_Java_18

 

 


 

以上我们简单的通过字符串切片操作,来得到我们想要的结果,下面要讲的list、tuple切片操作和字符串切片操作一样,下面我就不再细讲了,直接看例子:

 

四、假设有个list,其中含1000个元素,元素依次是从1到1000。

 

例子1:我们取50-60这11个元素,操作如下:

 

python里字典切片 python dict切片_Java_19

 


 

例子2:我们取出前10个元素

 

python里字典切片 python dict切片_字符串_20

 


 

例子3:前20个元素,每五个元素一分组,不够的单独分出来【通俗点就是连续的字符且字符间步长等于5】,取组内的第一个字符,也就是1 2 3 4 5我们取【1】,6 7 8 9 10我们取【6】,依次类推,如下:

 

python里字典切片 python dict切片_python_21

 


 

例子4:利用切片操作复制一个list

 

python里字典切片 python dict切片_python里字典切片_22

 


 

上面我们可以看出,list切片操作后,对象仍然是一个list,同理,字符串切片操作后得到的仍然是字符串,tuple,也一样:

 

python里字典切片 python dict切片_Java_23

 


 

       切片操作很方便的使我们截取我们想要的Part,简单粗暴,但是,切片操作背后的代码肯定不止表面上一行代码就能搞定的,所以,虽说Python表面上省去了我们书写代码的工作量,其实是以牺牲demo性能换来的,没关系,我们要的就是这种效果!性能我们可以优化,但是写代码这种事,怎么方便怎么来!