【问题标题】:How to sort a space character with special alphabetical?如何使用特殊字母对空格字符进行排序?
【发布时间】:2021-08-10 23:39:41
【问题描述】:

请告诉我如何按字母顺序对列表进行排序,但如果列表包含空格或特殊字符,那么它将被排序“错误”

我的清单:

list = ['0001.TIF', '0002.TIF', '0003 (2).TIF', '0003.TIF', '0004 (2).TIF', '0004.TIF', '0005.TIF', '0006.TIF', '0007 (2).TIF', '0007.TIF']

基本排序:

for i in sorted(list):
    print (i)

结果是:

0001.TIF
0002.TIF
0003 (2).TIF
0003.TIF
0004 (2).TIF
0004.TIF
0005.TIF
0006.TIF
0007 (2).TIF
0007.TIF

但是我如何对列表进行排序才能得到下面的结果?

0001.TIF
0002.TIF
0003.TIF
0003 (2).TIF
0004.TIF
0004 (2).TIF
0005.TIF
0006.TIF
0007.TIF
0007 (2).TIF

【问题讨论】:

    标签: python list sorting


    【解决方案1】:

    您想根据文件名的各个部分对它们进行排序,因此将其拆分并按此排序。见Split filenames with python

    data = ['0001.TIF', '0002.TIF', '0003 (2).TIF', '0003.TIF', '0004 (2).TIF', '0004.TIF', '0005.TIF', '0006.TIF', '0007 (2).TIF', '0007.TIF']
    desired = sorted(data, key=lambda f: os.path.splitext(os.path.basename(f)))
    for filename in desired:
        print(filename)
    

    我将扩展名作为一个决胜局,尽管您可能想要更改它并首先按扩展名排序,然后是文件名部分。

    也不要使用“list”作为变量名。这是一个类名,而且非常重要。

    【讨论】:

      【解决方案2】:

      另一种解决方案:创建键函数,您可以在其中使用re 提取所有数字组并将它们转换为整数:

      import re
      
      lst = [
          "0001.TIF",
          "0002.TIF",
          "0003 (2).TIF",
          "0003.TIF",
          "0004 (2).TIF",
          "0004.TIF",
          "0005.TIF",
          "0006.TIF",
          "0007 (2).TIF",
          "0007.TIF",
      ]
      
      
      def key_fn(x):
          return tuple(map(int, re.findall(r"\d+", x)))
      
      
      print(*sorted(lst, key=key_fn), sep="\n")
      

      打印:

      0001.TIF
      0002.TIF
      0003.TIF
      0003 (2).TIF
      0004.TIF
      0004 (2).TIF
      0005.TIF
      0006.TIF
      0007.TIF
      0007 (2).TIF
      

      【讨论】:

      • 好点,他们可能只想依靠自己的领域知识,并以这种特定的文件名格式拆分字段。 4 位数字,然后是可选的副本号。共同的元素是编写你自己的键函数,给出你想要的顺序。
      猜你喜欢
      • 1970-01-01
      • 2020-05-23
      • 2023-03-06
      • 2020-11-13
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      相关资源
      最近更新 更多