Pythonでは、リストのすべての部分集合を取得します
配列のすべての部分集合を列挙するには、再帰の手法を使うことができる。具体的な実装は次の通りである。
def subsets(nums):
res = []
backtrack(nums, [], res, 0)
return res
def backtrack(nums, subset, res, start):
res.append(subset[:]) # 将当前子集加入结果列表
for i in range(start, len(nums)):
subset.append(nums[i]) # 添加当前元素到子集中
backtrack(nums, subset, res, i+1) # 递归调用下一层,start参数为i+1,表示下一个位置从i+1开始
subset.pop() # 回溯,将添加的元素移除
# 测试
nums = [1, 2, 3]
print(subsets(nums))
結果は出力されます
[[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3]]
ここでは、部分集合リスト subset を維持し、再帰呼出しのたびに現在部分集合を結果リスト res に追加する再帰法が使用されます。次に、配列内の各要素を繰り返し処理し、各要素の位置で再帰呼出しを継続して配列全体が処理されるまで繰り返します。再帰呼出しでは、start パラメータを増やして次の再帰の開始位置を制御し、重複部分を生成しないようにします。