zoukankan      html  css  js  c++  java
  • Python 极简教程(八)字符串 str

    由于字符串过于重要,请认真看完并保证所有代码都至少敲过一遍。

    对于字符串,前面在数据类型中已经提到过。但是由于字符串类型太过于常用,Python 中提供了非常多的关于字符串的操作。而我们在实际编码过程中,又经常会与字符串打交道。所以这里字符串单独列出一节来讲解。

    字符串是由一对引号(单双引号都可以)括起来进行标识。字符串的数据类型是 str , 同时字符串也是一种序列。

    定义一个字符串:

    >>> s = 'nemo'
    >>> s1 = '中文'   
    >>> s2 = "Python 极简教程"
    >>> s3 = '''      # 多行字符串,用三对引号(三个单引号或者三个双引号)
    Python 极简教程
    希望大家多提意见
    顺便点个喜欢
    '''
    

    字符串操作

    字符串的操作有很多与列表类似,因为字符串和列表同样都是序列。
    1. 字符串相加(拼接)

    >>> s = '懒猫'
    >>> s1 = 'nemo'
    >>> s + s1
    '懒猫nemo'
    

    2. 字符串乘法

    >>> s = 'nemo'
    >>> s * 3
    'nemonemonemo'
    

    3. 成员运算

    >>> ms = 'n'
    >>> s = 'nemo'
    >>> ms in s
    True
    >>> 'x' in s
    False
    >>> 'x' not in s
    True
    
    # 也可以判断连续字符串
    >>> 'em' in s
    True
    

    4. 通过索引取字符
    字符串通过索引取字符的方式与列表中的取值相同。字符串中的每个字符相当于字符串的每个元素,索引从0开始

    >>> s = 'nemo'
    >>> s[1]    
    'e'
    

    格式化字符串

    1. 使用 % 格式化

    格式化字符串,本义是在打印的时候可以将打印出来的字符串格式化后输出(控制台,也就是打印语句的输出),这样字符串看起来更加整洁美观。
    但是实际编码过程中,很少直接通过控制台输出,所以更多的时候,格式化字符串用来将字符串中的部分字符串用参数代替。
    例如,从键盘接收两个输入,分别是姓名和爱好,然后输出* x 的爱好是 y *(x 用输入的姓名代替,y 用输入的爱好代替)

    name = input('请输入姓名:')
    fondness = input('请输入爱好:')
    print('%s 的爱好是 %s !' % (name, fondness))
    

    以上代码,用 IDLE 新建一个文件,运行效果更好。

    '%s 的爱好是 %s !' % (name, fondness)  
    

    上面的%s 的爱好是 %s !就是格式化字符串,%为占位符,s表示占位的数据格式为字符串。
    引号后面的 % 为固定格式
    (name, fondness) 是实际的参数,需要和前面的 % 数量一致,数量不一致就会报错。如果只有一个 % 就不需要括号

    # 只有一个参数的情况
    >>> name = 'nemo'
    >>> '你的名字是 %s!' % name
    '你的名字是 nemo!'
    # 还可以先存起来,后面再赋值
    >>> s = '你的名字是 %s!'
    >>> s % 'nemo'
    '你的名字是 nemo!'
    

    其他还有很多格式化的用法,因为实际使用比较少,这里就不再赘述。有兴趣的可以查阅相关资料。

    2. 使用 format 函数

    format 函数是 Python 官方目前主推的格式化用法。但是同样我们实际很少需要在控制台上输出,因此主要还是用它来进行字符串内部字符的参数化。
    format 函数的占位符为 {},可以是空的 {},后面实际赋值的时候按照 {} 出现的顺序依次赋值。也可以在 {} 中加上索引,如{0},{1}等,0 代表后面的第一个实际值,1为第二个,依次类推。还可以在 {} 中加上名称, 如 {name}, {fondness},那么会以该名称赋值。
    示例如下:

    # 以三种方式修改上面的例子
    #1. 空的 {} 占位
    name = input('请输入姓名:')
    fondness = input('请输入爱好:')
    print('{} 的爱好是 {}!'.format(name, fondness)) # 写法上注意一下  字符串.format()
    
    #2. 加上索引
    name = input('请输入姓名:')
    fondness = input('请输入爱好:')
    print('{1} 的爱好是 {0}!'.format(fondness, name))    # 故意更换了一下位置,对比一下
    
    #3. 加上名称
    name = input('请输入姓名:')
    fondness = input('请输入爱好:')
    print('{n} 的爱好是 {f}!'.format(f=fondness, n=name))  # 前面 {} 加了名字,在后面就写成 名称=值(变量)
    

    上面的例子,故意调整了一下顺序和名称,自己动手练练,感受一下。

    3. f 字符串

    f-string是 Python 3.6 中定义的一种参数化字符串的方式,主要是让格式化字符串更加便捷。
    f-string 中,不要再使用 %-格式化 或者 format 函数中的复杂写法,可以直接在字符串中写入变量名。f-string 用 {} 标识变量,区别在于 {} 不再是用来占位的,而是直接写入变量名。
    修改上面的格式化例子:

    name = input('请输入姓名:')
    fondness = input('请输入爱好:')
    print(f'{name} 的爱好是 {fondness}!')    # 字符串前面的 f 大小写均可
    

    除此之外,还可以在f-string中使用函数和表达式:

    # 显示当前时间
    >>> import time    # 引入时间库
    >>> print(f'当前时间是 {time.ctime()}!')    # time.ctime() 为显示当前时间的函数
    当前时间是 Tue Mar 19 23:30:49 2019!
    
    # 直接在字符串中进行运算
    >>> x = 10
    >>> y = 5
    >>> F'x + y = {x+y}'
    'x + y = 15'
    

    可谓非常方便实用,而且据说速度优于其他的格式化方式。

    r 字符串

    字符串中如果出现 反斜杠 会出现一些不同的意思,比如 表示换行, 制表符(Tab)等等,如果你想表示一个 Windows 路径的时候,比如C: est emo,那么实际打印的时候会变成如下的样式:

    >>> path = 'C:	est
    emo.txt'
    >>> print(path)
    C:	est
    emo.txt
    

    如果是操作文件的时候,就会出现各种异常。因此为了避免其中的特殊字符造成字符串不是原来的意思,我们可以使用 r(大小写都可以)来将字符串中的特殊字符全部定义为普通字符。

    >>> path = r'C:	est
    emo'  # r 写在字符串第一个引号前面
    >>> print(path)
    C:	est
    emo
    

    字符串常用内置方法

    以下仅列出较为常用的内置方法,其余方法请参考其他资料。(写太多不常用的内容,就称不上极简教程了)
    注意:其中部分极少使用的默认参数也已去掉
    下面这些方法非常常用,需要背下来,就算不能背下来,至少要知道有这些方法。

    方法 说明
    str.strip() 删除字符串前后空格
    str.replace(old, new) 把将字符串中的 old 替换成 new
    str.join(seq) 以指定字符串作为分隔符,将 seq 中所有的元素合并为一个新的字符串
    str.split(obj) 以 obj 为分隔符切割字符串,生成一个列表
    str.find(obj) 检测 obj 是否包含在字符串中 str中,如果是返回开始的索引值,否则返回-1
    str.index(obj) 跟find()方法一样,只不过如果str不在字符串中会报一个异常
    string.startswith(obj) 检查字符串是否是以 obj 开头。是则返回 True,否则返回 False
    string.endswith(obj) 检查字符串是否以 obj 结束。如果是,返回 True,否则返回 False
    string.upper() 转换 string 中的小写字母为大写
    string.lower() 转换 string 中所有大写字符为小写

    1. str.strip() 去前后空格

    我们在进行登录的时候,偶尔手抖在账号前或后输入了一个空格,也能登录成功;有些系统又不行。之所以能登录成功,其实是因为开发人员做了处理,帮你去掉了不小心在账号前后输入的空格。这就是 strip 这个方法的用途。

    >>> s = '  nemo  '    # 前后有空格
    >>> s.strip()
    'nemo'
    

    2. str.replace(old, new) 替换

    字符串替换,用于将字符串中的某部分内容替换成新的字符串。

    # 将下面字符串中的'+'加号,替换成','逗号。
    >>> s = 'MP3+pdf+doc+txt'
    >>> s.replace('+', ',')      # 被替换的字符串在前,替换后的字符串在后      
    'MP3,pdf,doc,txt'
    

    3. str.join(seq) 字符串组合

    字符串组合,是将列表中的字符串元素组合成一个完整的字符串。使用指定的字符串来分隔组合好的字符串。
    这个方法是比较容易出错的,组合的字符串在'.'前面,列表是作为参数放在括号中。

    # 比如列表中有多个单词,想组成一句话
    >>> words= ['it', 'was', 'the', 'season', 'of', 'Light']
    >>> ' '.join(words)    # 用空格分隔,空格要放在前面
    'it was the season of Light'
    
    # 小练习 1
    >>> li = ['a', 'b', 'c']  # 组合成 a_b_c
    >>> face = ['*', '_', '*']  # 组合成 *_*
    

    注意,列表中必须全部是字符串,如果存在其他数据类型则会报错。

    4. str.split(obj) 切割字符串

    以传入的obj 为分隔符切割字符串,生成一个列表。七号和上面的 join 方法是反过来的。
    比如:

    # 将下面的英文句子拆分为单个的英文的单词
    >>> s = 'this is a pig'
    >>> s.split()    # 默认按空格进行拆分
    ['this', 'is', 'a', 'pig']    # 拆出后的结果是一个列表
    
    # csv文件是以逗号分隔的一种文件格式。将下面以逗号分隔的内容拆分成一个列表
    >>> s = '张三,男,30,170'
    >>> s.split(',')    # 按逗号拆分,括号中把逗号作为字符串传入
    ['张三', '男', '30', '170']
    
    # 小练习 2
    # 1. 从键盘接收一组数字输入,数字以逗号分隔。返回这一组数字中的最大最小值
    # 2. 从键盘接收一组数字,数字以空格分隔。反向后输出
    

    5. 字符串查找

    str.find(obj)
    从左边开始查找整个字符串,返回找到匹配的字符的起始位置索引。如果找不到则返回 -1。

    >>> s = 'it was the season of Darkness'
    # 找到其中 of 所在的索引
    >>> s.find('of')    # 找到则返回 of 开始的索引值
    18
    >>> s.find('nemo')    # 找不到返回 -1
    -1
    

    str.index(obj)
    查找的结果与 find 方法一样。不同的是,找不到的时候,会报错。

    >>> s = 'it was the season of Darkness'
    # 找到其中 of 所在的索引
    >>> s.index('of')
    18
    >>> s.index('nemo')
    ValueError: substring not found    # 报子串不存在的错误
    

    6. 字符串判断

    用于判断字符串是否以什么开头或者以什么结尾。
    str.startswith(obj)
    检查字符串是否是以指定的obj字符串开头。是则返回 True,否则返回 False

    >>> s = 'it was the season of Darkness'
    >>> s.startswith('it')    # 注意 startswith,start 后面有个 s,starts
    True
    >>> s.startswith('ness')
    False
    

    str.endswith(obj)
    检查字符串是否是以指定的obj字符串结尾。是则返回 True,否则返回 False

    >>> s = 'it was the season of Darkness'
    >>> s.endswith('ness')    # 注意 endswith,end 后面也有个s
    True
    >>> s.endswith('it')
    False
    

    7. 大小写转换

    string.upper()
    把字符串中的小写字母全部转换成大写字母。

    >>> s = 'nEmO'
    >>> s.upper()
    'NEMO'
    

    str.lower()
    把字符串中的大写字母全部转换成小写字母。

    >>> s = 'nEmO'
    >>> s.lower()
    'nemo'
    
    # 小练习 3
    # s = 'NemO'
    # s == 'nemo'  改造这个等式,使之返回 True
    

    小练习答案:

    # 小练习 1
    >>> li = ['a', 'b', 'c']  # 组合成 a_b_c
    >>> '_'.join(li)
    >>> face = ['*', '_', '*']  # 组合成 *_*
    >>> ''.join(face)
    # 小练习 2
    # 1. 从键盘接收一组单词,以逗号分隔。返回这一组单词中的最大最小值
    >>> s = input('请输入一组单词,以逗号分隔:')
    请输入一组单词,以逗号分隔:nemo,leo,nano,aux
    >>> li = s.split(',')
    >>> max(li)
    'nemo'
    >>> min(li)
    'aux'
    # 2. 从键盘接收一组数字,数字以空格分隔。将顺序反向后输出
    >>> s = input('请输入一组数字,以空格分隔:')
    请输入一组数字,以空格分隔:31 25 14 8 11
    >>> li = s.split()
    >>> li.reverse()
    >>> ' '.join(li)
    '11 8 14 25 31' 
    # 小练习 3
    # s = 'NemO'
    # s == 'nemo'  改造这个等式,使之返回 True
    >>> s.lower() == 'nemo'        # 这也是实现字符串忽略大小写的写法
    >>> s == 'nemo'.upper()      
    
  • 相关阅读:
    aa
    MySQL5.8下载及安装——免安装版
    eclipse中修改项目名
    利用kibana学习 elasticsearch restful api (DSL)
    https://www.cnblogs.com/shwee/p/9084535.html
    springboot+mybatis实现动态切换数据源
    docker-machine命令安装
    Docker 安装 RabbitMq
    yum 找不到程序,yum更换国内阿里源
    CentOS安装etcd和flannel实现Docker跨物理机通信
  • 原文地址:https://www.cnblogs.com/zmll/p/10611073.html
Copyright © 2011-2022 走看看