fork download
  1. def condense_sets(sets):
  2. result = []
  3. for candidate in sets:
  4. for current in result:
  5. if candidate & current: # found overlap
  6. current |= candidate # combine (merge sets)
  7.  
  8. # new items from candidate may create an overlap
  9. # between current set and the remaining result sets
  10. result = condense_sets(result) # merge such sets
  11. break
  12. else: # no common elements found (or result is empty)
  13. result.append(candidate)
  14. return result
  15.  
  16. sets = eval(input())
  17. print(condense_sets(sets))
Success #stdin #stdout 0.04s 9332KB
stdin
[ {1,2}, {2,3}, {3,4}, {10, 11, 12}, {10, 13}, {20, 21} ]
stdout
[{1, 2, 3, 4}, {10, 11, 12, 13}, {20, 21}]