Python学习--切片

取一个list或者tuple的部分元素是非常非常常见的操作。
比如有一个list如下

L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']

那么,取前三个元素如何取?
我反正第一时间想到用下标,用索引

L1 = [L[0], L[1], L[2]]

上面是笨方法

那扩展一下使用for循环

r = []
n = 3
for i in range(n):
	r.append(L[i])

print(r)

可以写一个函数将其封装起来,并且可以做到通用,但是,如果经常取指定索引范围的操作,适用循环就会变得非常麻烦。所以Python提供了切片(Slice)操作符,能大大简化这种操作。

对于上述问题,取前3个元素,用一行代码就可以完成切片:

>>> L[0:3]
['Michael', 'Sarah', 'Tracy']

L[0:3]表示,从索引的0开始取,到3为止,不包括3
理解为L[x:y],如果x,y都大于等于0,表示从x开始取,取y个元素。
如果第一个索引是0,还可以省略:

>>>L[:3]
['Michael', 'Sarah', 'Tracy']

Python支持L[-1]取倒是第一个元素,所以,同样支持倒数切片,

>>>L[-2:]
>['Bob', 'Jack']
>>>> L[-2:-1]
['Bob']

这里表示,方向仍然是正方向的,其中L[-2:],省略了第二个数,也就表示从倒数第二个开始取,取完的意思。
以及,倒数第一个元素的索引是==-1==

切片操作实操

先创建一个0-99的数列

L=list(range(100))
print(L)
[0, 1, 2, 3, ..., 99]

取前10个数:

>>>L[:10]
>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

后10个数:

>>>L[-10:]
>[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

取11-20个数

>>>L[10:20]
>[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

前十个数,每两个取一个:

>>>L[:10:2]
>[0, 2, 4, 6, 8]

取所有数,每5个取一个:

>>>L[::5]
>[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

啥都不写,只写[:]就可以复制一个list

>>>L[:]
>[0, 1, 2, 3, ..., 99]

那tuple也一样,只是注意,tuple切片的结果仍然是tuple

字符串也可以切片,和list和tuple一样。

练习

利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()方法:

def trim(s):
    while s[:1] == ' ':
        s = s[1:]
    while s[-1:] == ' ':
        s = s[:-1]
    return s

一开始想到的是,设置一个begin和end索引,然后一个个循环找出开头不是空格的索引的位置,和结尾不是空格的索引位置,然后切片,发现代码又臭又长。这边直接使用索引,取出首部第一个和结尾第一个进行比较,若是空格,则再用切片首部从第一个开始切(有第0个之说),结尾来看,若是空格,则切去最后一个,利用切片来写就是s[:-1],牢记,切片都是正向。

小结
有了切片操作,很多地方循环就不再需要了。Python的切片非常灵活,一行代码就可以实现很多行循环才能完成的操作。

记住,以后写循环前,想想切片是否可以用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值