Member 14024410 Ответов: 2

Как я могу сортировать с некоторыми условиями в Python?


У меня есть вопрос, и я был бы очень признателен, если бы вы протянули мне руку помощи.
Я хочу отсортировать x1,x2,..,x5 на основе некоторых условий.

my_list=[['x2','x5','1'],['x3','x1','0'],['x3','x2','0'],['x4','x1','0'],['x2','x3','1'],['x1','x2','1'],['x1','x3','1'], ['x2','x1','0'], ['x2','x4','1'],['x4','x5','1']]

Я знаю, что если 3-й элемент в подсписках в my_list равен "1", то это означает, что первый элемент больше второго (x2>x5).
И, если 3-й элемент равен "0", это означает, что второй элемент больше первого (x1>x3).
Основываясь на такой информации, можно ли было бы отсортировать x1,..x5?

Что я уже пробовал:

Основываясь на такой информации, можно ли было бы отсортировать x1,..x5?

Richard MacCutchan

"Я знаю, что если 3-й элемент в подсписках в my_list равен "1", то это означает, что первый элемент больше второго (x2>x5)."
Как "x2" больше, чем "x5", или "x1" больше, чем "x3"? и что именно вы пытаетесь отсортировать, и в каком порядке?

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
Основываясь на такой информации, можно ли было бы отсортировать x1,..x5?

Это может быть, но не обязательно, это зависит от списка, который у вас есть.
Возьмите лист бумаги и карандаш.
Нарисуйте график
Нарисуйте 5 узлов с именами x1 - x5.
Список дает вам отношение "больше" между парами узлов.
для каждого элемента списка нарисуйте ребро между узлами и поставьте стрелку, чтобы показать, какой из них больше.
Убедитесь, что все ребра непротиворечивы и не противоречат друг другу.

Только анализ графика может сказать вам, достаточно ли списка связей og для сортировки узлов или только подмножества.
Язык не имеет значения, вам нужно найти алгоритм, который скажет, отсортированы ли узлы или нет.


Рейтинг:
0

CPallini

Извините, но мне не повезло (если я прав).
Простая трансформация производит

l = [['x5', 'x2'], ['x3', 'x1'], ['x3', 'x2'], ['x4', 'x1'], ['x3', 'x2'], ['x2', 'x1'], ['x3', 'x1'], ['x2', 'x1'], ['x4', 'x2'], ['x5', 'x4']]
Где в каждом подсписке первый элемент меньше второго.

Теперь, пока вы можете писать
'x5' < 'x4' < 'x2' < 'x1'

Нет никакого способа установить правильное положение 'x3', все следующие последовательности разрешены:
'x5' < 'x4' < 'x3' < 'x2' < 'x1'
'x5' < 'x3' < 'x4' < 'x2' < 'x1'
'x3' < 'x5' < 'x4' < 'x2' < 'x1'