fork(1) download
  1. def get_order(_list):
  2. order = _list[0]
  3. for sublist in _list[1:]:
  4. if not sublist:
  5. continue
  6. if len(sublist) == 1:
  7. if sublist[0] not in order:
  8. order.append(sublist[0])
  9. continue
  10. new_order = order.copy()
  11. for index, value in enumerate(sublist):
  12. inserted = False
  13. new_order_index = None
  14. if value in new_order:
  15. new_order_index = new_order.index(value)
  16. new_order.remove(value)
  17. for previous_value in sublist[:index][::-1]:
  18. if previous_value in new_order:
  19. insert_index = new_order.index(previous_value) + 1
  20. print('inserting', value, 'at position', insert_index, 'after', previous_value)
  21. new_order.insert(insert_index, value)
  22. inserted = True
  23. break
  24. if inserted:
  25. continue
  26. for next_value in sublist[index:]:
  27. if next_value in new_order:
  28. insert_index = new_order.index(next_value)
  29. print('inserting', value, 'at position', insert_index, 'before', next_value)
  30. new_order.insert(insert_index, value)
  31. inserted = True
  32. break
  33. if inserted:
  34. continue
  35. if new_order_index is None:
  36. print('appending', value)
  37. new_order.append(value)
  38. else:
  39. print('leaving', value, 'at position', new_order_index)
  40. new_order.insert(new_order_index, value)
  41. order = new_order
  42. return order
  43.  
  44. print(get_order([[1, 4], [2, 3], [3, 4], [1, 2]]))
Success #stdin #stdout 0.03s 9308KB
stdin
Standard input is empty
stdout
appending 2
inserting 3 at position 3 after 2
inserting 3 at position 1 before 4
inserting 4 at position 2 after 3
inserting 1 at position 2 before 2
inserting 2 at position 3 after 1
[3, 4, 1, 2]