以正确的顺序对间隔进行排序

Sort the Interval in the correct order

现在我有了这个间隔列表

test = ['(0.556, 1.389]', '(0.192, 0.386]', '(0.386, 0.556]', '(-0.759, -0.401]', '(-0.401, -0.064]', '(-0.064, 0.192]', '(-1.34, -0.759]']

我想把它们排序成正确的顺序,我试过这些代码:

test.sort()
sorted(test, key=lambda l:l[0])

但是结果不正确:

test = ['(-0.064, 0.192]', '(-0.401, -0.064]', '(-0.759, -0.401]', '(-1.34, -0.759]', '(0.192, 0.386]', '(0.386, 0.556]', '(0.556, 1.389]']

我只是想要一个按顺序排序的列表,如下所示:

test = ['(-1.34, -0.759]', '(-0.759, -0.401]', '(-0.401, -0.064]', '(-0.064, 0.192]', '(0.192, 0.386]', '(0.386, 0.556]', '(0.556, 1.389]']

如评论中所述,您的列表元素是字符串。解决问题的一种方法是将它们转换为元组,然后对元组列表进行排序:

import ast

test = ['(0.556, 1.389]', '(0.192, 0.386]', '(0.386, 0.556]', '(-0.759, -0.401]', '(-0.401, -0.064]', '(-0.064, 0.192]', '(-1.34, -0.759]']

new_list = []

for x in test:
    a = x.replace(']', ')')
    b = ast.literal_eval(a)
    new_list.append(b)

new_list = sorted(new_list, key=lambda l:l[0])
print(new_list)
# [(-1.34, -0.759), (-0.759, -0.401), (-0.401, -0.064), (-0.064, 0.192), (0.192, 0.386), (0.386, 0.556), (0.556, 1.389)]

此代码段获取您的列表,将每个字符串末尾的 ] 替换为 ),然后使用 ast 库(请参阅 documentation) 将带有 literal_eval 的字符串转换为实际的元组并将它们附加到新列表中。 随后,它应用 sorted 正如您在问题中提出的那样。