Python天梯赛备考攻略:字符串篇实战解析

知识点拆解
  

1. 切片技巧

定义

通过 [start:end:step] 语法截取字符串的子序列

  • start:起始索引(包含,默认0)

  • end:结束索引(不包含,默认末尾)

  • step:步长(可为负数实现逆序)

  • 字诀:包左不包右

    核心用途
  • 快速逆序字符串

  • 提取特定区间的子串

  • 间隔取字符

  • 示例代码
    #输入一个字符串s
    s = "Hello,天梯赛!"
    
    # 基本切片
    print(s[0:5])    # 输出 "Hello" (索引0-4)
    print(s[7:10])   # 输出 "天梯赛"
    
    # 逆序技巧
    print(s[::-1])   # 输出 "!赛梯天,olleH"
    print(s[5:2:-1]) # 输出 ",ol" (从索引5到3逆序)
    
    # 步长应用
    print(s[::2])    # 输出 "Hlo天赛" (每隔1个字符取)
    注意事项
  • 索引越界时自动取有效范围(如s[0:100]等效s[0:])

  • 原字符串不可变,切片会生成新字符串


  • 2. 格式化输出

    定义

    使用 f-string 或 format() 方法控制字符串的显示格式

    常用格式符
    格式符号 功能说明 示例
    :>n 右对齐,总宽度n f"{6:>4}" → "   6"
    :<n 左对齐,总宽度n f"{6:<4}" → "6   "
    :^n 居中对齐,总宽度n f"{6:^4}" → " 6  "
    :0>n 右侧补零到n位 f"{6:0>4}" → "0006"
    :.2f 保留两位小数 f"{3.1415:.2f}" → "3.14"
    😡 十六进制格式 f"{255:x }" → "ff"
    print(f"{6:>4}")
    print(f"{6:<4}")
    print(f"{6:^4}")
    print(f"{6:0>4}")
    print(f"{6:0<4}")
    print(f"{6:0^4}")
    #答案输出示例已在上面表格中给出
    场景应用
  • 按要求补前导零(如输出时间格式)

  • 对齐表格数据

  • 控制浮点数精度

  • 示例代码
    # 成绩格式化输出
    name, score = "张三", 95.5
    print(f"{name:<5}的成绩:{score:0>5.1f}分") 
    # 输出 "张三   的成绩:095.5分"
    
    # 日期补零
    month, day = 3, 8
    print(f"日期:{month:0>2d}-{day:0>2d}") 
    # 输出 "日期:03-08"

    3. 正则表达式

    定义

    通过特定模式匹配文本的工具,Python中通过 re 模块实现。

    re.findall()提取数字/字母  
         匹配模式 r'\d+'(整数) / r'-?\d+'(含负数)
    
    常用元字符
    模式 含义 示例
    \d 匹配数字 等价于[0-9]
    \w 匹配字母/数字/下划线 等价于[a-zA-Z0-9_]
    \s 匹配空白字符 包含空格、换行等
    . 匹配任意字符(除换行)
    * 匹配前字符0次或多次
    + 匹配前字符1次或多次
    ? 匹配前字符0或1次
    典型应用场景
  • 从复杂文本中提取数字/字母

  • 验证输入格式(如邮箱、电话号码)

  • 替换特定模式的文本

  • 示例代码
    import re
    
    text = "订单号:AB123,金额:-45.6元,数量:2"
    
    # findall提取所有整数(含负数)
    nums = re.findall(r"-?\d+", text) 
    print(nums)  # 输出 ['123', '-45', '6', '2']
    
    # 分割混合字符
    parts = re.split(r"(\d+)", "A12B34C") 
    print(parts)  # 输出 ['A', '12', 'B', '34', 'C']
    
    # 替换非数字字符
    clean_str = re.sub(r"[^\d]", "", "Tel: 0571-8888-6666")
    print(clean_str)  # 输出 "057188886666"

     正则表达式在密码强度评估器的设计中有反复使用过,他的公式套用相对比较晦涩,例如\d表示数字,+表示一个或多个,-?处理可能出现的负号等等,比较细碎可以学一个用一个,初学者以尽量知道在干什么为主。


    4. 字符串转换

    核心方法
    方法 功能说明 时间复杂度
    .split() 按分隔符分割为列表 O(n)
    .join() 合并可迭代对象为字符串 O(n)
    .replace() 替换子串 O(n)
    .upper() 转大写 O(n)
    .strip() 去除首尾空白 O(n)
    应用场景对比
    场景 推荐方法
    按空格分割单词 s.split() (无参数自动处理)
    处理含多种分隔符 re.split()
    合并路径 "/".join(path_parts)
    批量替换多个不同字符 .translate()
    示例代码
    # 分割与合并
    s = "2023-08-15"
    parts = s.split("-")  # ['2023', '08', '15']
    new_s = "/".join(parts)  # "2023/08/15"
    
    # 多重替换
    s = "Hello World"
    s = s.replace("H", "J").replace("W", "")  # "Jello orld"
    
    # 快速清洗数据
    dirty_str = "  Price: $123.45\n"
    clean_str = dirty_str.strip().replace("$", "").upper()
    # 结果:"PRICE: 123.45"

    综合应用示例

    题目:处理用户输入的复杂字符串,提取所有整数并求和

    import re
    
    input_str = "数据:A1销售额5000元,B2销量-300件,成本-1200.5"
    numbers = list(map(int, re.findall(r"-?\d+", input_str)))
    total = sum(numbers)  # 5000 + (-300) + (-1200) = 3800
    print(f"合计:{total}") 

    对应练习题

      L1-011 A-B(字符串删除操作) 
      L1-026 I Love GPLT(固定格式输出) 
      L1-034 点赞(统计特征字符) 

    作者:重生之我要成为代码大佬

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python天梯赛备考攻略:字符串篇实战解析

    发表回复