我想对间隔列表进行排序。每个间隔由一个字符串描述,使用符号'>='
和'<'
。
然而,有不同的间隔模式:
- 部分区间有上下限,如
'>= 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']