擅长:python、mysql、java
<p>可以使用递归:</p>
<pre><code>def cluster(d, current = []):
options = [i for i in d if any(c in current for c in i)]
_flattened = [i for b in options for i in b]
d = list(filter(lambda x:x not in options, d))
if not options or not d:
yield current+_flattened
if d and not options:
yield from cluster(d[1:], d[0])
elif d:
yield from cluster(d, current+_flattened)
for a, *b in [[[1,2],[6,4],[2,3],[5,4]], [[1,2],[3,4],[2,3],[5,4]], [[1,2],[3,4],[2,3],[5,4], [10, 11, 12], [13, 15], [4,6], [6, 8], [23,25]]]:
print([list(set(i)) for i in cluster(b, a)])
</code></pre>
<p>输出:</p>
^{pr2}$