python切片一文让你全部搞懂

226 阅读4分钟

5.1 字符串

这里介绍常用的几种方法

5.1.1 创建

a = 'apple'
b = "apple"
c = '''这是一个苹果
你知不知道'''   # 创建多行字符串

建议:在python使用字符串根据自己习惯要么都使用单引号,要么都是用双引号。这样代码可读性会更好,不会使代码混乱。

5.1.2 访问

  1. 知道下标: 可以通过索引访问

    print(a[3])
    

    这种方式比较简单

  2. 使用for循环

    for i in a:
        print(i) 
    

    for循环注意事项:

    for i in a:
        if(i=="a"):
            a[i] =5
        print(i)
    

    上面的代码会有什么问题吗?不妨运行一下:

    很显然会报一个:'str' object does not support item assignment

    其实上面已经提到了,我们的 str是不可变数据类型 ,所以我们不可以修改内部的值。

    延伸:我们在 JAVA中String也是不可变的,使用final修饰,我们replace犯法其实就是 new String() 创建一个新的对象。

  3. 使用切片

    我们不仅可以在字符串中使用切片,也可以在 其他对象,比如:列表,元组等。

    切片语法:

    切片的语法如下:

    sequence[start:stop:step]
    
    • start:切片的起始位置(包含)。 默认为 0 (思考默认是否正确后面有提到)
    • stop:切片的结束位置(不包含)。 省略不写时表示到末尾结束
    • step:切片的步长(可选参数,默认为 1)。

    这里需要说明一下,我们的start ,stop, step可以为正数,同时也可以为负数

    下面介绍切片的所有语法:(都是经过博主亲自测试整理,可以验证补充纠错),

    1. 不省略 :

      • 全为正:

        s ="applet"
        print(len(s))
        print(s[0:6:1])
        

        正常切片,一定记住不包含最后一个索引。

        需要注意:

        • 当 stop大于 字符串的索引时,我们会截取整个字符串。
      • 有负数的情况

        首先来讲讲每个位置上出现负数所代表的含义:

        • start 和 stop为负数表示从右往左的索引,以 -1 为例,-1 表示右边第一个元素,依次类推。
        • step为负数时,表示 从右往左(还是从start索引到 stop索引) 遍历,如果是-1 就说从右往左每次前进1步。

        看到这里你大概就可以明白了,这里需要注意的是,无论是正数还是负数,我们的 stop位置的索引,永远都是不包含的。

        s = "applet"
        #stop 为负数
        print('输出:{name}'.format(name = s[0:-1:1]))  # 输出:apple
        

        这个例子就充分说明了stop位置的索引永远都不包含。

      • 总结:

        如果我们想要截取一个有效的字符串,(字符串不为空),

        • 当 step为正时,我们的 stop要大于start
        • 当 step为负时,我们的 start要大于stop
    2. 省略(我们要看懂别人的代码,省略形式是必会的)

      • 不省略 冒号

        s = "applet"
        # 省略一位,我们不能省略冒号,省
        #省略 start位置
        print('输出:{name}'.format(name= s[:-3:-1]))  #输出:
        #省略 start
        print('输出:{name}'.format(name= s[:-3:1]))
        ​
        print('输出:{name}'.format(name= s[::-1]))
        

        输出结果:

        输出:te 输出:app 输出:telppa

        我们到这里就会发现一个结论 : start和 stop位置并不都是默认为 0和 最后一个位置,他其实和 step的正负有关,和start 和stop没有关系,

        • 如果step 为 1正数,从前往后,start默认index = 0 ,stop默认 index= 结尾结束
        • 如果step为 负数,从后往前,start默认为index = -1, stop默认 index=开始位置

        所以这里:

        print('输出:{name}'.format(name= s[::1]))
        ​
        print('输出:{name}'.format(name= s[::-1]))
        

        第一个结果是:输出:applet,拿到真个字符串

        第二个结果是:输出:telppa,字符串反转

      • 省略冒号,显然了只能省略一个冒号

        print('输出:{name}'.format(name= s[1:4]))
        print('输出:{name}'.format(name= s[1:]))
        print('输出:{name}'.format(name= s[:3]))
        print('输出:{name}'.format(name= s[:]))
        

        很显然了,我们省略的只能是 step的值,这里显然就很好理解每个代码的含义了。这里其实跟range函数是一样的省略的都是 step。并且大家要注意,省略步长,省略的步长是1

step的正负影响什么?

step为正,截取方向是从左到右,step为负,截取方向是从右向左。不要让多个正负号把自己搞混了,清楚这点十分重要。

5.1.3. 格式化format

我们在进行输入输出的时候都 喜欢将变量放在 字符串中进行打印,在python中我们使用format进行,

print("he is {name}".format(name ="lisi"))

这里还要注意的是:使用 f 在字符串前面去格式化,这种你方法更加的简单和方便

其他的方法我们在学完对象之后再看可能理解会深刻一点