擅长:python、mysql、java
<p>最简单的方法是使用集合差异来识别被生成的组合排除的零件:</p>
<pre><code>>>> from itertools import combinations
>>> population = set('ABCD')
>>> for group in combinations(population, 3):
remainder = population.difference(group)
result = ''.join(remainder), ''.join(group)
print(result)
('D', 'ACB')
('B', 'ACD')
('C', 'ABD')
('A', 'CBD')
</code></pre>
<p>这种技术适用于分区,而不仅仅是<code>(1, 3)</code>。例如,以下是<code>(2, 3)</code>分区:</p>
<pre><code>>>> population = set('ABCDE')
>>> for group in combinations(population, 3):
remainder = population.difference(group)
result = ''.join(remainder), ''.join(group)
print(result)
('ED', 'ACB')
('BD', 'ACE')
('BE', 'ACD')
('CD', 'ABE')
('CE', 'ABD')
('CB', 'AED')
('AD', 'CBE')
('AE', 'CBD')
('AB', 'CED')
('AC', 'BED')
</code></pre>