fork download
  1. lst = [[1,2,3], [10,5], [3,8,5]]
  2.  
  3. lookup = {}
  4. out = []
  5. index = 0
  6. for grp in lst:
  7. keys = [lookup.get(num, None) for num in grp]
  8. keys = [key for key in keys if key is not None]
  9. if len(keys):
  10. if len(set(keys)) != 1:
  11. for num in grp:
  12. out[keys[0]].append(num)
  13. seen = set()
  14. keys = [key for key in keys if key not in seen and not seen.add(key)]
  15. for key in keys[1:]:
  16. out[keys[0]].extend(out[key])
  17. del out[key]
  18. seen = set()
  19. out[keys[0]] = [item for item in out[keys[0]] if item not in seen and not seen.add(item)]
  20. else:
  21. for num in grp:
  22. lookup[num] = keys[0]
  23. out[keys[0]].extend(grp)
  24. seen = set()
  25. out[keys[0]] = [item for item in out[keys[0]] if item not in seen and not seen.add(item)]
  26. else:
  27. out.append(grp)
  28. for num in grp:
  29. lookup[num] = index
  30. index += 1
  31. print out
  32. assert out == [[1, 2, 3, 10, 5, 8]]
Runtime error #stdin #stdout 0.09s 10840KB
stdin
Standard input is empty
stdout
[[1, 2, 3, 8, 5, 10]]