美文网首页数据蛙数据分析每周作业
第二周:一道练习题的深究——有关列表切片、append()和fi

第二周:一道练习题的深究——有关列表切片、append()和fi

作者: 我住永安当 | 来源:发表于2020-09-08 22:19 被阅读0次

    一、题目

    目的:定义函数findall,实现对字符串find方法的进一步封装

    具体要求:要求返回符合要求的所有位置的起始下标,如字符串"helloworldhellopythonhelloc++hellojava",需要找出里面所有的"hello"的位置,最后将返回一个元组(0,10,21,29),即将h的下标全部返回出来,而find方法只能返回第一个

    def findall(string, s):

        ret = [] #设置空列表备用

        if s=='':

            return ret #如果要查找的位置为空,直接返回空列表

        while True: #设置第一层循环,这个循环的目的是为了重复执行find()函数

            index = string.find(s) 

            '''

            取得此层循环中s所在的位置,将字符串作为一个对象检索

            如果得到的索引如果得到-1,说明该值并不在string中

            '''

            if index != -1:

                if len(ret)!=0: #

                    ret.append(ret[-1]+index+len(s)) #如果ret非空,则新添加的值(表示得到的符合要求的索引值在初始string中的实际索引值)应为列表中末尾的值+len(s)+新生成的索引位置

                else:

                    ret.append(index) #如果ret为空列表直接添加即可

                string = string[index+len(s):] #每次得到一个位置时,应该将string重新切片,其位置正好从find()得到的索引位置开始以len(s)作为长度结束的位置为止。

            else:

                break #如果index=-1则说明到string尾部为止都没能查询到s的值。因此检索结束。

        return ret 

    print(findall("abc-abc-abc-ab","-"))

    二、代码的具体分析

    要读懂这段代码,除了循环的逻辑,还需要了解三个用法。

    1.find()函数

    Python find()方法 | 菜鸟教程

    用途:检测字符串中是否包含子字符串 str

    效果:返回该字符串开始的索引值(即它的位置)

    参数:

    str -- 指定检索的字符串

    beg -- 开始索引,默认为0。

    end -- 结束索引,默认为字符串的长度(len(string))。

    具体用法:

    默认从0开始搜索a 传入位置变量,从索引为1开始搜索 搜索字符串中不存在的变量会return:-1

    2、列表切片

    Python中列表切片list[-1:]与list[:-1]误区_Shaun_X-CSDN博客

    line2-3的对比:区别在于输出物的type

    line2是运用了索引的方式,输出了列表中末位所在的'值'。

    line3是运用了切片的方式,将列表切片只留下最末位,输出的仍然是一个列表。

    line4-5的对比:区别在于区间右端点的包含与否

    line4切片时包含右区间,lin5切片时未包含右端点。

    具体用法:

    3.append()函数(顺便对比extend()函数)

    python中 append() 和 extend() 的用法_Arrow and Bullet-CSDN博客

    用途:append() 方法用于在列表末尾添加新的对象。

    (extend()用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表))

    特点:直接改变原列表的结构。

    (extend()处理后有返回值,需要储存在新的变量中才能使用)

    具体用法:

    如下两图所示,append会将整个列表作为子项追加到原列表中,而extend则只是追加列表中的内容。

    追加对象为列表1:列表中的形式没有影响 追加对象为列表2:列表中的形式没有影响

    如下图所示,append会将整个字符串作为子项追加到原列表中,而extend将字符串拆开后追加到原列表中。

    追加对象为字符串

    如下图所示,append会将整个列表作为子项追加到原列表中,而extend将列表内容追加到原列表中。

    追加对象为单个数字形式内容的列表

    相关文章

      网友评论

        本文标题:第二周:一道练习题的深究——有关列表切片、append()和fi

        本文链接:https://www.haomeiwen.com/subject/xuujektx.html