def combine_lists(lists):
# Keep a set of processed items
skip = set()
sets = map(set, lists)
for i, a in enumerate(sets):
# If we already returned this set, skip it
if i in skip:
continue
for j, b in enumerate(sets[i + 1:], i + 1):
# Use a set to check if there are common numbers
if a & b:
skip.add(j)
a |= b
# yield all sets that were not added to different sets
for i, a in enumerate(lists):
if i not in skip:
yield a
print list(combine_lists([[13, 15, 17], [1, 2, 4], [1,7,9]]))
ZGVmIGNvbWJpbmVfbGlzdHMobGlzdHMpOgogICAgIyBLZWVwIGEgc2V0IG9mIHByb2Nlc3NlZCBpdGVtcwogICAgc2tpcCA9IHNldCgpCiAgICBzZXRzID0gbWFwKHNldCwgbGlzdHMpCgogICAgZm9yIGksIGEgaW4gZW51bWVyYXRlKHNldHMpOgogICAgICAgICMgSWYgd2UgYWxyZWFkeSByZXR1cm5lZCB0aGlzIHNldCwgc2tpcCBpdAogICAgICAgIGlmIGkgaW4gc2tpcDoKICAgICAgICAgICAgY29udGludWUKCiAgICAgICAgZm9yIGosIGIgaW4gZW51bWVyYXRlKHNldHNbaSArIDE6XSwgaSArIDEpOgogICAgICAgICAgICAjIFVzZSBhIHNldCB0byBjaGVjayBpZiB0aGVyZSBhcmUgY29tbW9uIG51bWJlcnMKICAgICAgICAgICAgaWYgYSAmIGI6CiAgICAgICAgICAgICAgICBza2lwLmFkZChqKQogICAgICAgICAgICAgICAgYSB8PSBiCgogICAgIyB5aWVsZCBhbGwgc2V0cyB0aGF0IHdlcmUgbm90IGFkZGVkIHRvIGRpZmZlcmVudCBzZXRzCiAgICBmb3IgaSwgYSBpbiBlbnVtZXJhdGUobGlzdHMpOgogICAgICAgIGlmIGkgbm90IGluIHNraXA6CiAgICAgICAgICAgIHlpZWxkIGEKCnByaW50IGxpc3QoY29tYmluZV9saXN0cyhbWzEzLCAxNSwgMTddLCBbMSwgMiwgNF0sIFsxLDcsOV1dKSk=