Python基础(四): 字符串

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

形式:

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

    • 使用单引号包含的: '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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容