代码之家  ›  专栏  ›  技术社区  ›  Albert Wijaya

有没有办法让扩展名按字母顺序排列,而不是按长度排列?

  •  0
  • Albert Wijaya  · 技术社区  · 2 年前

    我一直在使用这段代码根据字母顺序排列扩展名

    def sort_by_ext(files: List[str]) -> List[str]:
        sort1 = sorted(files, key=lambda x: x[x.rindex("."):-1])
        return sort1
    

    当此代码使用输入([“x.bit”、“y.man”、“format.c”])时,格式为。当我希望它位于位置1时,c是第一个。有办法吗?

    1 回复  |  直到 2 年前
        1
  •  1
  •   lroth    2 年前

    我尝试使用str.partition()函数。作为参数点”已使用。partition()使用参数,将字符串分为3部分:

    • 争吵之后的一切

    files = sorted(files, key=lambda x: x.partition(".")[2])
    print(files)
    

    第二个版本是使用操作系统。path()模块,该模块从文件路径中提取扩展名:

    import os
    files = sorted(files,key=lambda x: os.path.splitext(x)[1:])
    print(files)
    
        2
  •  0
  •   VPfB    2 年前

    sort1 = sorted(files, key=lambda x: x[x.rindex("."):-1])
    

    这个 :-1 在切片中,切掉最后一个字符。用一个 .c 你失去了分机 c . 使用 None 或者让职位空着。

    演示:

    inp = ["x.bit","y.man","format.c"]
    print([x[x.rindex("."):-1] for x in inp])
    #                      ^^
    

    打印: ['.bi', '.ma', '.']