1.初识切片
问题:如果我想从一个列表当中,取出其中的两项来组成一个新的列表,我们可以怎么做?
比如:[1,2,3,4] ,从这个列表当中取出2,3,并让它们组成一个新的列表[2,3]
实际上,我们可以利用以前我们学到的知识来完成这个功能
#原始列表
list_1=[1,2,3,4]
#新建一个空列表,用于存储
list_2=[]
#利用索引,以及append方法来进行取出
list_2.append(list_1[1])
list_2.append(list_1[2])
#得到结果
print(list_2)
运行结果如下:
但实际上,我们可以有更加方便快捷的方式,使用切片,我们直接上代码
list_1=[1,2,3,4]
list_2=list_1[1:3]
print(list_2)
运行结果如下:
我们只使用了list_2=list_1[1:3]
这一行语句,即得到了结果,和以前利用索引提取的方式不同,list_1[1:3]
使用了:
来获取结果,表示的是获取索引1-2的项,注意不包括3,这和range()
函数非常相似,这个就是列表的切片功能。
2.切片的规则
实际上,在切片功能值,我们提供的切片数值是可以超过列表的索引值的,这并不会引起python的报错
list=[1,2,3]
print(list[0,10])
我们发现,程序并没有报错,而是可以正常运行,再一次印证了切片的强大之处
3.切片进阶
实际上,切片的规则如下:list[start_index:stop_index:step]
,这里有三个参数,分别是:start_index、stop_index、step,表示起始索引,终止索引和步长,因此,有了这三个参数之后,可以组合出各种有趣的功能
list=[1,2,3,4,5]
#倒序打印
print(list[::-1])
#其他运行结果
print(list[::2])
print(list[1:4:2])
print(list[::-2])
因此,我们惊奇的发现,利用切片甚至可以实现我们上次多行实现的逆序算法
string="123456"
print(string[::-1])
在这里,我们只使用了一行代码string[::-1]
就实现了反序的效果
4.基础查询
那学习切片有什么样作用呢?在平常的使用当中,我们经常使用快捷键Ctrl+F
来查询字符,实际上,我们同样可以使用Python来实现这样的一个功能,这就需要使用到切片,比如在 字符串A=“GFUDFASDFASDGADFAE" 中查询是否有 字符串B=”FAS“ ,我们就可以使用切片来进行
如果是人在查找字符的查找时,我们一般都是逐字逐句的进行对比,同样,对于程序来说也是一样的,由于我们需要查找的字符只有三个,因此我们每次从A中取出三个字符进行对比就可以了,比如GFU、FUD、UDF来进行对比,因此,我们就可以写出如下的代码
a="GFUDFASDFASDGADFAE"
b="FAS"
for i in range(len(a)):
if a[i:i+3]==b:
print("找到了")
else:
print("没找到")
运行结果如下:
5.优化查询
在以上实现的程序当中,实际上还有很多缺点,比如说
- 打印信息不够丰富
- 循环的浪费
- 如何计算出打印的次数
根据以上需求,我们可以对程序进行进一步优化
a="GFUDFASDFASDGADFAE"
b="FAS"
number=0
for i in range(len(a)):
if a[i:i+3]==b:
number+=1
print("找到了在索引",i,"的位置")
print("找到了",number,"次")
运行结果如下:
6.综合练习
- 现有6个优秀学生,分别是["好好","学学","天天","上上","雷雷","奥奥"],请使用切片功能选择3个偶数位置的学生,好好、天天、雷雷,并打印出来。
- 现有两个字符串
A=ZCRYNJDASOMWYENDIOPYEMME YCSYENYYMENPYN
B=YEN
请说出B字符串在A字符串中出现了多少次
1 条评论
感觉不难