Сортировать интервал в правильном порядке - PullRequest
2 голосов
/ 27 июня 2019

Rigt теперь у меня есть этот список интервалов

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]']

1 Ответ

4 голосов
/ 27 июня 2019

Как уже упоминалось в комментариях, ваши элементы списка являются строками.Одним из способов решения вашей проблемы было бы преобразование их в кортежи и последующая сортировка списка кортежей:

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 (см. Документацию ), чтобы превратить строки с literal_eval в фактические кортежи и добавить их в новый список.Впоследствии он применяется sorted, как вы предложили в своем вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...