PYHON中的切片

Python中的切片容易混淆,这里总结一下自己的看法

切片的语法

1

a = [1,2,3,4]

2

x = a[1:2]    #实际上执行的是 a.__getitem__(slice(1,2,None))

1

slice([start], stop[, step]

 

2

 

3

step的符号表示一种方向的含义

 

4

+:从左向右看,start默认是0stop默认是索引最大值

5

-:从右向左看,start默认是索引最大值,stop默认是0

 

1

1.先看第三个参数,如果该数为正,则从前往后数,如果为负,则从后往前数,如果非1,则是跳步来数(1表示走一步,跳0步)

2

2.PYTHON总是左开右闭的,也就是说第一个参数要包括,第二个参数不包括

 

3

3.如果第一个参数没填,则自动设为第一个参数(根据第三个参数的正负判断是整数第一个还是倒数第一个)

4

4.如果第二个参数没填,则自动设定为最后一个参数(根据第三个参数的正负判断是整数第一个还是倒数第一个

 

5

  另外这个参数不会包括进去【左开右闭】)

示例

01

>>> s = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

02

>>> s[5:0:-1]

 

03

[5, 4, 3, 2, 1]

04

>>> s[5:4:-1]

 

05

[5]

06

>>> s[:3:-1]

 

07

[9, 8, 7, 6, 5, 4]

08

>>> s[0:3:-1]

 

09

[]

10

>>> s[9::-1]

 

11

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

12

>>> s[::2]

 

13

[0, 2, 4, 6, 8]

代码分析

01

首先定义 s = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

02

 

 

03

Python中正索引是从0开始的,负索引从-1开始,索引1对应1, 而索引-1对应9.

04

 

 

05

s[5:0:-1]: 1.step 为负数,从右往左输

06

           2.从索引 5 开始 到索引结束, 但不包括索引0 , 输出为 [5, 4, 3, 2, 1]

 

07

 

08

s[:3:-1] 1.step 为负数,从右往左输出

 

09

           2.step 为负数,[start]默认值为索引最大值, 9, 那么这个切片等价于s[9:3:-1]

10

           3.从索引 9 开始 到索引结束, 但不包括索引3 , 输出为[9, 8, 7, 6, 5, 4]

 

11

 

12

s[9::-1]:  1.step 为负数,从右往左输

 

13

           2.step 为负数,[stop]默认值为0, 那么这个切片等价于s[9:0:-1],输出为[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

14

 

 

15

s[::2]:    1.step 为正数,从右往左输

16

           2.step 为正数,start默认是0stop默认是索引最大值,那么这个切片等价于s[0:9:2

 

17

           3.step 2表示走两步, 即中间间隔一个字符, 输出为[0, 2, 4, 6, 8]

 

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