如何用科学数字自然排序?

时间:2019-07-18 05:30:32

标签: python

我的科学数字排序列表有问题。

这里是一个例子,

my_list = ['Time:  1.00000E+01 h', 'Time:  1.00000E+02 h', 'Time:  1.50000E+01 h']

我希望这样的列表顺序更自然。

sorted_list = ['Time:  1.00000E+01 h', 'Time:  1.50000E+01 h', 'Time:  1.00000E+02 h']

我该怎么做?

到目前为止,我尝试了natsort软件包,而natsorted(my_list)没有返回期望的结果。

2 个答案:

答案 0 :(得分:4)

float函数中提取数字并将其转换为实际的key值,它应该可以正常工作:

my_list = ['Time:  1.00000E+01 h', 'Time:  1.00000E+02 h', 'Time:  1.50000E+01 h']

my_list.sort(key=lambda x: float(x.split()[1]))

print(my_list)

Try it online!

输出:

['Time:  1.00000E+01 h', 'Time:  1.50000E+01 h', 'Time:  1.00000E+02 h']

如果您想保持原始的list不变,请执行此操作,而不要在.sort上调用my_list

sorted_list = sorted(my_list, key=lambda x: float(x.split()[1]))

答案 1 :(得分:0)

import re
pattern = re.compile(r"\d\.\d+E\+\d+")
my_list = ['Time:  1.00000E+01 h', 'Time:  1.00000E+02 h', 'Time:  1.50000E+01 h']
sorted(my_list, key=lambda m: float(pattern.findall(m)[0]))