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)

运行结果如下:

image-20201009164147889

但实际上,我们可以有更加方便快捷的方式,使用切片,我们直接上代码

list_1=[1,2,3,4]
list_2=list_1[1:3]
print(list_2)

运行结果如下:
image-20201009165638189

我们只使用了list_2=list_1[1:3]这一行语句,即得到了结果,和以前利用索引提取的方式不同,list_1[1:3]使用了来获取结果,表示的是获取索引1-2的项,注意不包括3,这和range()函数非常相似,这个就是列表的切片功能。

2.切片的规则

实际上,在切片功能值,我们提供的切片数值是可以超过列表的索引值的,这并不会引起python的报错

list=[1,2,3]
print(list[0,10])

image-20201009171129970

我们发现,程序并没有报错,而是可以正常运行,再一次印证了切片的强大之处

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])

image-20201009172802232

因此,我们惊奇的发现,利用切片甚至可以实现我们上次多行实现的逆序算法

string="123456"
print(string[::-1])

image-20201009173022492

在这里,我们只使用了一行代码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("没找到")

运行结果如下:

image-20201009175046950

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,"次")

运行结果如下:

image-20201009175536289

6.综合练习

  • 现有6个优秀学生,分别是["好好","学学","天天","上上","雷雷","奥奥"],请使用切片功能选择3个偶数位置的学生,好好、天天、雷雷,并打印出来。
  • 现有两个字符串
    A=ZCRYNJDASOMWYENDIOPYEMME YCSYENYYMENPYN

B=YEN
请说出B字符串在A字符串中出现了多少次

最后修改:2020 年 10 月 20 日
如果觉得我的文章对你有用,请随意赞赏