博客
关于我
字符串排序
阅读量:439 次
发布时间:2019-03-06

本文共 872 字,大约阅读时间需要 2 分钟。

为了解决问题,我们需要编写一个程序,按照特定规则排序输入字符串中的字符。规则包括:英文字母按顺序排列,同一英文字母的大小写保留输入顺序,非英文字母保持原位。

方法思路

  • 遍历字符串:记录每个字符及其位置。
  • 提取字母字符:将字母字符与其位置一起存储。
  • 自定义排序:根据规则对字母字符进行排序。比较时,先按小写字母顺序,相同字母按输入顺序排列。
  • 重建字符串:将排序后的字母字符放回原位置,非字母字符保持不变。
  • 解决代码

    s = input().strip()chars = list(s)letters = [(c, i) for i, c in enumerate(chars) if c.isalpha()]def compare(a, b):    if a[0].lower() == b[0].lower():        return a[1] - b[1]    return ord(a[0].lower()) - ord(b[0].lower())sorted_letters = sorted(letters, key=compare)result = []for i, c in enumerate(chars):    if c.isalpha():        result.append(sorted_letters[i][0])    else:        result.append(c)print(''.join(result))

    代码解释

  • 读取输入:使用input().strip()读取输入字符串并转换为列表。
  • 记录字符和位置:使用列表推导式遍历字符串,记录每个字符及其索引。
  • 提取字母字符:创建一个列表,存储每个字母字符及其索引。
  • 定义比较函数:比较函数compare首先比较小写字母,如果相同则比较原索引,确保按输入顺序排列。
  • 排序字母字符:使用sorted函数和自定义键进行排序。
  • 重建字符串:遍历原字符串,非字母字符保持原位,字母字符替换为排序后的结果。
  • 输出结果:将结果列表转换为字符串并输出。
  • 转载地址:http://mvjyz.baihongyu.com/

    你可能感兴趣的文章
    Openwrt LuCI模块练习详细步骤
    查看>>
    openwrt_git_pull命令提示merger冲突时如何解决?
    查看>>
    OpenWrt包管理软件opkg的使用(极路由)
    查看>>
    OpenWrt固件编译刷机完全总结
    查看>>
    Open××× for Linux搭建之二
    查看>>
    Open×××有线网络时使用正常,无线网络时使用报错的解决方案
    查看>>
    Opera Mobile Classic Emulator
    查看>>
    Operation not supported on read-only collection 的解决方法 - [Windows Phone开发技巧系列1]
    查看>>
    OperationResult
    查看>>
    Operations Manager 2007 R2系列之仪表板(多)视图
    查看>>
    operator new and delete
    查看>>
    operator new 与 operator delete
    查看>>
    operator() error
    查看>>
    OPPO K3在哪里打开USB调试模式的完美方法
    查看>>
    oppo后端16连问
    查看>>
    Optional类:避免NullPointerException
    查看>>
    Optional讲解
    查看>>
    ORA-00932: inconsistent datatypes: expected - got NCLOB【ORA-00932: 数据类型不一致: 应为 -, 但却获得 NCLOB 】【解决办法】
    查看>>
    ORA-00942 表或视图不存在
    查看>>
    ORA-01034: ORACLE not available
    查看>>