我的科学数字排序列表有问题。
这里是一个例子,
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)
没有返回期望的结果。
答案 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)
输出:
['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]))