排序由字符串描述的间隔列表



我想对间隔列表进行排序。每个间隔由一个字符串描述,使用符号'>=''<'

然而,有不同的间隔模式:

  • 部分区间有上下限,如'>= 0.45 AND < 0.5';
  • 部分区间只有上下限,如'<0.05';
  • 最后,一些间隔由单个数字组成,如'1'

下面是要排序的列表示例:

unique_levels = ['1',
'>= 0.45 AND < 0.5',
'>= 0.35 AND < 0.4',
'>= 0.25 AND < 0.3',
'>= 0.85 AND < 0.9',
'>= 0.4 AND < 0.45',
'>= 0.95 AND < 1',
'>= 0.55 AND < 0.6',
'>= 0.3 AND < 0.35',
'>= 0.2 AND < 0.25',
'>= 0.15 AND < 0.2',
'>= 0.5 AND < 0.55',
'>= 0.6 AND < 0.65',
'>= 0.9 AND < 0.95',
'>= 0.8 AND < 0.85',
'>= 0.75 AND < 0.8',
'>= 0.05 AND < 0.1',
'>= 0.65 AND < 0.7',
'>= 0.7 AND < 0.75',
'>= 0.1 AND < 0.15',
'<0.05']

我尝试了下面的代码行来排序列表:

sorted(unique_levels, key=lambda x: float("".join([i for i in x if i.isdigit()])))

这适用于大多数时间间隔,但会产生一些错误,例如'1'在排序列表的开始,而应该在末尾。

如果只是"1"让你烦恼,你可以这样做:

sorted(unique_levels, key=lambda x: '>=1' if x == '1' else x)

返回:

['<0.05', 
'>= 0.05 AND < 0.1', 
'>= 0.1 AND < 0.15', 
'>= 0.15 AND < 0.2', 
'>= 0.2 AND < 0.25', 
'>= 0.25 AND < 0.3', 
'>= 0.3 AND < 0.35', 
'>= 0.35 AND < 0.4', 
'>= 0.4 AND < 0.45', 
'>= 0.45 AND < 0.5', 
'>= 0.5 AND < 0.55', 
'>= 0.55 AND < 0.6', 
'>= 0.6 AND < 0.65', 
'>= 0.65 AND < 0.7', 
'>= 0.7 AND < 0.75', 
'>= 0.75 AND < 0.8', 
'>= 0.8 AND < 0.85', 
'>= 0.85 AND < 0.9', 
'>= 0.9 AND < 0.95', 
'>= 0.95 AND < 1', 
'>=1']

最新更新