Python基础(四): 字符串

215 阅读9分钟

字符串: 由单个字符组成的集合

形式:

  • 非原始字符串: 会被转义符影响的字符串

    • 使用单引号包含的: 'abc'
    • 使用双引号包含的: "abc"
    • 使用三个单引号包含的: '''abc'''
    • 使用三个双引号包含的: """abc"""
    str = '这是一个"xxx"\n他会\'xxx\''
    print(str)
    
    # 打印:
    这是一个"xxx"
    他会'xxx'
    
  • 原始字符串: 不会被转义符影响的字符串

    • 使用单引号包含的: r'abc'
    • 使用双引号包含的: r"abc"
    • 使用三个单引号包含的: r'''abc'''
    • 使用三个双引号包含的: r"""abc"""
    str = r'这是一个"xxx"\n他会\'xxx\''
    print(str)
    
    # 打印:
    这是一个"xxx"\n他会\'xxx\'
    
  • 转义符

    • 概念: 通过转换某个指定的字符, 使它具备特殊的含义
    • \(写在结尾): 续行符
    str = "wo shi"\
        " xxx"
    print(str)
    
    # 打印:
    wo shi xxx
    
    • \': 单引号
    • \": 双引号
    • \n: 换行符
    str = "wo shi\nxxx"
    print(str)
    
    # 打印:
    wo shi 
    xxx
    
    • \t: 横向制表符
    str = "wo shi\txxx"
    print(str)
    
    # 打印:
    wo shi	xxx
    

各种形式的特点

  • 单/双引号:
    • 混合使用可以避免使用引号转义符
    str1 = 'wo shi "xxx"' 
    str2 = "wo shi 'xxx'"
     print(str1)
     print(str2)
    
     # 打印: 
     wo shi "xxx"
    wo shi 'xxx'
    
    • 一般需要写成一行:
    str1 = "wo shi "\
        "xxx"
    str2 = ("wo shi "
        "xxx")
    
  • 三引号:
    str1 = '''wo 
    shi 
    xxx'''
    print(str1)
    
    # 打印:
    wo 
    shi 
    xxx
    
    str2 = '''\
    wo  \
    shi \
    xxx'''
    print(str1)
    
    # 打印:
    wo shi xxx
    
    • 可以用于注释
    '''
    这里是多行注释
    这里是多行注释
    这里是多行注释
    '''
    

字符串的一般操作

  • 字符串拼接
    • 方式1: str1 + str2
    str1 = "xxx"
    str2 = "ooo"
    print(str1 + str2)
    # 打印: 
    xxxooo
    
    • 方式2: 直接将两个字符串放在一起, 注意: 不能使用字符串变量
    str = "xxx""ooo"
    print(str)
    # 打印: 
    xxxooo
    
    • 使用格式符
    str1 = "xxx"
    str2 = "ooo"
    print("%s%s" % (str1, str2))
    # 打印: 
    xxxooo
    
    • 字符串乘法
    str = "xxxooo " * 3
    print(str)
    # 打印: 
    xxxooo xxxooo xxxooo
    
  • 字符串切片
    • 概念: 获取一个字符串的某个片段
    • 获取某一个字符
      • name[下标]
      • 下标: 字符串中每一个字符都有一个对应的编号, 且编号从0开始
      str = "wo zai xue python"
      print(str[0], str[3], str[6])
      # 打印:
      w z x
      
      • 注意: 如果下标不能越界, 并且下标为负数的时候表示从尾部开始定位
      str = "wo zai xue python"
      print(str[-1], str[-13], str[-6])
      # 打印:
      n a p
      
    • 获取一个片段
      • name[起始:结束:步长]
      • 获取范围: [起始, 结束), 左闭右开区间
      • 默认值: 起始=0, 结束=len(str), 步长=1
      • 获取顺序, 步长>0: 从左到右, 步长<0: 从右到左

      注意: 从左到右, 起始必须小于结束, 从右到左, 起始必须大于结束

      str = "wo zai xue python"
      print(str[0:6:1])       
      # 因为步长=1, 所以从左到右取, 此时起始对应的字母, 必须在结束对应字母的左边
      # 打印:
      wo zai
      
      print(str[13:3:-1])
      # 因为步长=-1, 所以从右往左取, 此时起点对应的字母, 必须在结束对应字母的右边
      # 打印:
      typ eux ia
      
      print(str[12:6:1])      
      # 此时步长=1, 从左到右取, 但是起点对应字母 在 结束对应字母的右边, 所以无法获取到子串
      # 打印空
      
      print(str[3:13:-1])
      # 此时步长=-1, 从右到左取, 但是起点对应字母 在 结束对应字母的左边, 所以无法获取到子串
      # 打印空
      
    • 特殊案例: 反转字符串
    str = "wo zai xue python"
    print(str[::-1])
    # 打印: 
    nohtyp eux iaz ow
    

字符串的函数操作

查找计算、转换、填充压缩、分割拼接、判定

  • 查找计算
len(str): 计算字符串的字符个数, `len`函数是内置函数, 可直接使用
    str: 需要计算的字符串
find(sub, start=0, end=len(str)): 查找字符串索引位置, 找不到返回-1
    sub: 子串
    start: 起点索引
    end: 终点索引
rfind: 功能与 `find` 相同, 区别: 从右到左查找
index:(sub, start=0, end=len(str)): 获取子串索引位置, 找不到会报错
    sub: 子串
    start: 起点索引
    end: 终点索引
rindex: 功能与 `index`, 相同, 区别:从右到左查找
count(sub, start=0, end=len(str)): 计算某个子串出现的个数
    sub: 子串
    start: 起点索引
    end: 终点索引
  • 转换
replace(old, new, count): 使用新串替换旧串, 返回新串, 有字符串不变
    old: 旧串
    new: 新串
    count: 需要替换的个数, 默认为替换全部
capitalize(): 将字符串首字母变为大写, 返回新串, 原字符串不变
    无参数
title(): 将字符串中每个单词的首字母变为大写, 返回新串, 原字符串不变
    无参数
lower(): 将字符串中所有的字母变为小写, 返回新串, 原字符串不变
    无参数
upper(): 将字符串中所有的字母变为大写, 返回新串, 原字符串不变
    无参数
  • 填充压缩
ljust(width, fillchar): 将字符串填充为指定的width长度, 不足的地方用fillchar填充
参数:
    width: 指定结果字符串的长度
    fillchar: 原字符串长度不足width时, 使用fillchar填充不足部分
返回值:     
    新串
注意: 
    fillchar必须是长度为1的字符
    只有原有字符串不足width时才会填充
    不会修改原字符串
   *当需要填充时, 原有字符换靠左, 补充的字符靠右
rjust(width, fillchar): 将字符串填充为指定的width长度, 不足的地方用fillchar填充
参数:
    width: 指定结果字符串的长度
    fillchar: 原字符串长度不足width时, 使用fillchar填充不足部分
返回值: 
    新串
注意: 
    fillchar必须是长度为1的字符
    只有原有字符串不足width时才会填充
    不会修改原字符串
   *当需要填充时, 原有字符换靠右, 补充的字符靠左
center(width, fillchar): 将字符串填充为指定的width长度, 不足的地方用fillchar填充
参数:
    width: 指定结果字符串的长度
    fillchar: 原字符串长度不足width时, 使用fillchar填充不足部分
返回值: 
    新串
注意: 
    fillchar必须是长度为1的字符
    只有原有字符串不足width时才会填充
    不会修改原字符串
   *当需要填充时, 原有字符换居中, 如果需要填充个数为奇数, 则先填充右边, 再填充左边
lstrip(chars): 移除原字符串左侧所有的指定字符, 默认为空白字符
参数:
    chars: 字符集
返回值: 
    新串
注意: 
    chars表示的字符集的形式: "abc" -> "a"|"b"|"c"
    每一个字符单独使用, 只要字符串左边出现了abc中的任意一种, 都会被移除, 一直到chars中不包含的字符位置
    不会修改原有字符串
rstrip(chars): 移除原字符串右侧所有的指定字符, 默认为空白字符
参数:
    chars: 字符集
返回值: 
    新串
注意: 
    chars表示的字符集的形式: "abc" -> "a"|"b"|"c"
    每一个字符单独使用, 只要字符串右边出现了abc中的任意一种, 都会被移除, 一直到chars中不包含的字符位置
    不会修改原有字符串
  • 分割拼接
split(sep, maxsplit):讲一个大的字符串分割为几个子字符串
参数:
    sep: 分隔符
    maxsplit: 分割次数, 默认为有多少分割多少
返回值: 
    分割后的子字符串组成的列表
注意: 
    不会修改原字符串
partition(sep): 将字符串根据sep进行分割
参数:
    sep: 分隔符
返回值: 
    如果找到, 返回(分隔符左侧内容, 分隔符, 分隔符右侧内容)
    如果没找到, 返回(原字符串, "", "")
注意: 
    不会修改原字符串
    从左侧查找分隔符
rpartition(sep): 将字符串根据sep进行分割
参数:
    sep: 分隔符
返回值: 
    如果找到, 返回(分隔符左侧内容, 分隔符, 分隔符右侧内容)
    如果没找到, 返回("", "", 原字符串)
注意: 
    不会修改原字符串
    从右侧查找分隔符
splitlines(keepends): 根据换行符(\r, \n)将字符串分割为多个子串
参数:
    keepends: 布尔类型, 分割后的子串是否保留分隔符
返回值:
    被换行符分割的多个字串, 组成的列表
注意: 
    不会修改原字符串
join(iterable): 将可迭代对象通过指定的字符串进行拼接, 得到拼接后的字符串
参数:
    iterable: 可迭代对象, 例如字符串, 数组, 元组等
返回值: 
    拼接好的字符串
代码案例: 
str = "abc"
print("-".join(str))  # 打印: a-b-c
  • 判定
isalpha(): 判断字符串中是否所有的字符都是字母, 不区分大小写
参数:
    无
返回值:
    布尔类型, 是否全是字符
注意: 
    被判断的字符串, 至少有一个字符
isdigit():判断字符串中是否所有的字符都是数字
参数:
    无
返回值:
    布尔类型, 是否全是数字
注意: 
    被判断的字符串, 至少有一个字符
isalnum():判断字符串中是否所有的字符都是数字或者字母
参数:
    无
返回值:
    布尔类型, 是否全是数字或者字母
注意: 
    被判断的字符串, 至少有一个字符
isspace(): 字符串中是否所有的字符都是空白符
参数:
    无
返回值:
    布尔类型, 是否全是空白符
注意: 
    被判断的字符串, 至少有一个字符
startswith(prefix, start=0, end=len(str)): 判定一个字符串是否已prefix字符串开头
参数: 
    prefix: 需要判定的开头字符串
    start: 起点索引, 默认值0
    end: 终点所有, 默认值len(str)
返回值:
    布尔类型, 字符串是否以指定字符串开头
endswith(prefix, start=0, end=len(str)): 判定一个字符串是否已prefix字符串结尾
参数: 
    prefix: 需要判定的结尾字符串
    start: 起点索引, 默认值0
    end: 终点所有, 默认值len(str)
返回值:
    布尔类型, 字符串是否以指定字符串结尾
in: 语句, 判定一个字符串是否被另一个字符串包含
代码案例
result = "abc" in "abcdefg"
print(result)   # 打印: True
not in: 语句, 判定一个字符串是否不被另一个字符串包含
代码案例
result = "abc" not in "abcdefg"
print(result)   # 打印: False