数列切片操作

程序员成长之旅 · 程序员成长之旅/Python学习 · 1482 字

有的时候我们需要取出数组中的某一段数据 最笨的方法就是数组名[索引], 组名[索引], 组名[索引].... 还有循环

但不管是哪一个都显得太过繁重了

list中的切片就可以完美的解决这些问题 testList[开始:结束:间隔] 需要注意的是 切片和普通调用一个索引位置规则是一样的 数据从索引0开始 这点要特别注意 #演示基本操作 >>> testList=list(range(51)) #本实例索引和数据相等 >>> #先看一下完整的数据列表 ... print(testList) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50] >>> >>> #输出索引10及以后的所有数据 ... print(testList[10:]) [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50] >>> >>> #取出0到30索引位置的数据 ... print(testList[:30]) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29] >>> >>> #每隔2个取出一个数据(取出所有素数) ... print(testList[1::2]) [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49] >>> #取出所有偶数 ... print(testList[2::2]) [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50] >>> >>> #取出第5个到第10个之间索引位置的数据 ... print(testList[5:10]) [5, 6, 7, 8, 9]

x

1 testList [ 开始 : 结束 : 间隔 ] 2 需要注意的是

切片和普通调用一个索引位置规则是一样的

数据从索引0开始

这点要特别注意 3 4 #演示基本操作 5

testList

list ( range ( 51 )) #本实例索引和数据相等 6 7

#先看一下完整的数据列表 8 ... print ( testList ) 9 [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 ] 10

11

#输出索引10及以后的所有数据 12 ... print ( testList [ 10 :]) 13 [ 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 ] 14

15

#取出0到30索引位置的数据 16 ... print ( testList [: 30 ]) 17 [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 ] 18

19

#每隔2个取出一个数据(取出所有素数) 20 ... print ( testList [ 1 :: 2 ]) 21 [ 1 , 3 , 5 , 7 , 9 , 11 , 13 , 15 , 17 , 19 , 21 , 23 , 25 , 27 , 29 , 31 , 33 , 35 , 37 , 39 , 41 , 43 , 45 , 47 , 49 ] 22

#取出所有偶数 23 ... print ( testList [ 2 :: 2 ]) 24 [ 2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 , 22 , 24 , 26 , 28 , 30 , 32 , 34 , 36 , 38 , 40 , 42 , 44 , 46 , 48 , 50 ] 25

26

#取出第5个到第10个之间索引位置的数据 27 ... print ( testList [ 5 : 10 ]) 28 [ 5 , 6 , 7 , 8 , 9 ] #负数 切片 我们知道 普通调用数组时可以用负数来进行数据的索引 比如 print testList[-1] #意义就是输入倒数第一个数据 其他的细节和普通切片没有区别

1

1 #负数 切片 2 我们知道

普通调用数组时可以用负数来进行数据的索引 3 比如 4 print

testList [

1 ] #意义就是输入倒数第一个数据 5 其他的细节和普通切片没有区别 #字符串类型 切片 实际上没什么区别 一个字符就是一个元素 不过可以用来干一些特别的事情 #demo1 输入字符串 对首字母进行大写操作 注意运用了默认值参数 若不输入就是对第一个首字母进行大写 输入后就是对n个首字母进行大写 def firstCharUpper(s,n=1): return s[:n].upper()+s[n:]#upper() 函数可以对字符串进行大写 若直接输入变量名的话 会对整段数据大写 print firstCharUpper('hello') print firstCharUpper('sunday') print firstCharUpper('september') Hello Sunday September

1 21 3 10

1 #字符串类型 切片 2 实际上没什么区别

一个字符就是一个元素

不过可以用来干一些特别的事情 3 4 #demo1 输入字符串 对首字母进行大写操作 注意运用了默认值参数 若不输入就是对第一个首字母进行大写 输入后就是对n个首字母进行大写 5 def

firstCharUpper ( s , n

1 ): 6

return

s [: n ]. upper () + s [ n :] #upper() 函数可以对字符串进行大写 若直接输入变量名的话 会对整段数据大写 7 8 print

firstCharUpper ( 'hello' ) 9 print

firstCharUpper ( 'sunday' ) 10 print

firstCharUpper ( 'september' ) 11 12 13 Hello 14 Sunday 15 September #对切片操作叠加 #若我们提出需求 输出整段数列的最后5个 5的倍数的数字 该如何操作? #这样? print testList[30::5] #这样是最优的解决方案吗? 至少我觉得不能从根本上解决问题 而且不清晰 #这个时候就需要叠加切片操作啦 print testList[5::5][5:] #先把所有符合5的倍数的数据筛选出来 再对这部分数据进行筛选 :

x

1 #对切片操作叠加 2 #若我们提出需求 输出整段数列的最后5个 5的倍数的数字 该如何操作? 3 #这样? 4

print

testList [ 30 :: 5 ] 5 #这样是最优的解决方案吗? 至少我觉得不能从根本上解决问题 而且不清晰 6 7 #这个时候就需要叠加切片操作啦 8 print

testList [ 5 :: 5 ] [ 5 : ]

#先把所有符合5的倍数的数据筛选出来 再对这部分数据进行筛选