以正确的顺序对间隔进行排序
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
正如您在问题中提出的那样。
现在我有了这个间隔列表
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
正如您在问题中提出的那样。