Изменение порядка списка кортежей для соответствия значению следующего элемента в спискеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Изменение порядка списка кортежей для соответствия значению следующего элемента в списке

Сообщение Anonymous »

Если у меня есть такой список кортежей [(1, 3), (-6, 3), (1, 7)], и я хотел бы вернуть такой список [(7, 1),( 1, 3), (3, -6)]. Что я могу сделать? Любые идеи о том, как сортировать кортежи. Существенное условие основано на том факте, что они «соединяются», имея то же значение, что и начальное значение в следующем кортеже.
Я пробовал этот код, где я пытался поместить все в граф (список смежности/диктант), где каждый ключ является элементом кортежа, а затем я попытался упорядочить его в соответствии с условиями, которые я упоминал ранее, но он работает неправильно. С входными данными, подобными приведенным ранее
list = [(1, 3), (-6, 3), (1, 7)]
выход был
[(1, 3), (3, 7), (7, -6)]
вместо
[(7, 1 ),(1, 3), (3, -6)]
это код, который я использовал

Код: Выделить всё

def compoundGraph(compounds):
graph = {}
for tuple in compounds:
if tuple[0] in graph:
graph[tuple[0]].append(tuple[1])
else:
graph[tuple[0]] = [tuple[1]]
return graph

def traverse(graph, start, visited, result):
if start not in visited:
visited.add(start)
result.append(start)
if start in graph:
for neighbor in graph[start]:
traverse(graph, neighbor, visited, result)

def reorderCompounds(tuples_list):
graph = compoundGraph(tuples_list)
result = []
visited = set()
keys_copy = list(graph.keys())
for start in keys_copy:
traverse(graph, start, visited, result)
return [(result[i], result[i+1]) for i in range(len(result)-1)]

list = [(1, 3), (-6, 3), (1, 7)]
print(reorderCompounds(list))
Если у кого-то есть более элегантное или хотя бы правильное представление о том, как решить эту проблему, мы будем благодарны за помощь.

Подробнее здесь: https://stackoverflow.com/questions/783 ... n-the-list
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»