擅长:python、mysql、java
<p>我不知道这是不是最优雅的解决方案,但这是我现在唯一的解决方案:</p>
<pre><code>import itertools
#a = [(1,2), (2,3,4), (1,2,3,4), (3,4,5,6), (4,5), (8,9)]
#a = [(1,), (2,), (3,), (4,), (5,), (5,6), (6,7), (8,), (9, 10)]
a = [(0, 1, 2), (0,1), (1,2), (3,4), (4,5)]
def find_largest_group(x):
max_ = 0
max_len = max(map(max, x)) - min(map(min, x)) + 1
for i in range(1, len(x)+1):
b = itertools.combinations(x, i)
for tups in b:
m = len(set.union(*map(set, tups)))
if m==len(tuple(itertools.chain.from_iterable(tups))):
if m==max_len:
max_tups = tups
break
else:
if m > max_:
max_ = m
max_tups = tups
return max_tups
</code></pre>
<p>输出:</p>
<pre><code>In [68]: find_largest_group(a)
Out[68]: ((0, 1, 2), (3, 4))
</code></pre>