<p>不是最有效的解决方案,但这将产生所需的输出,并可用于增加最大元组大小:</p>
<pre><code>s = [(), (1,), (1,1), (1,2), (2,), (2,1,1), (2,1,2), (2,2)]
def tupleSameGroup(tuple1, tuple2, sameGroup=True):
if any(tuple1[idx]!=tuple2[idx] for idx in range(len(tuple1))):
return False
return sameGroup
groups = [[i, j] for i in s for j in [x for x in s if len(x)>len(i)] if tupleSameGroup(i, j)]
</code></pre>
<p>收益率:</p>
<pre><code>[[(), (1,)], [(), (1, 1)], [(), (1, 2)], [(), (2,)], [(), (2, 1, 1)], [(), (2, 1, 2)], [(), (2, 2)], [(1,), (1, 1)], [(1,), (1, 2)], [(2,), (2, 1, 1)], [(2,), (2, 1, 2)], [(2,), (2, 2)]]
</code></pre>
<p>然后您可以根据公共元素将这些组组合在一起:</p>
<pre><code>combined_groups = [sorted(list(set(i) | set(j))) for i in groups for j in groups if i[-1] in j and i!=j]
</code></pre>
<p>收益率:</p>
<pre><code>[[(), (1,), (1, 1)], [(), (1,), (1, 2)], [(), (1,), (1, 1)], [(), (1,), (1, 2)], [(), (2,), (2, 1, 1)], [(), (2,), (2, 1, 2)], [(), (2,), (2, 2)], [(), (2,), (2, 1, 1)], [(), (2,), (2, 1, 2)], [(), (2,), (2, 2)], [(), (1,), (1, 1)], [(), (1,), (1, 2)], [(), (2,), (2, 1, 1)], [(), (2,), (2, 1, 2)], [(), (2,), (2, 2)]]
</code></pre>
<p>最后,我们可以创建一个没有任何重复项的新列表:</p>
<pre><code>no_duplicates = []
for i in combined_groups:
if i not in no_duplicates:
no_duplicates.append(i)
</code></pre>
<p>收益率:</p>
<pre><code>[[(), (1,), (1, 1)],
[(), (1,), (1, 2)],
[(), (2,), (2, 1, 1)],
[(), (2,), (2, 1, 2)],
[(), (2,), (2, 2)]]
</code></pre>