How to get all possible subsets from a given group of numbers in Python

3 Answers

0 votes
#  Uses built‑in itertools
#  Returns tuples

from itertools import combinations

def all_subsets(nums):
    subsets = []
    for r in range(len(nums) + 1):
        subsets.extend(combinations(nums, r))
    return subsets

print(all_subsets([1, 2, 3]))


'''
run:

[(), (1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]

'''

 



answered Mar 27 by avibootz
edited Mar 27 by avibootz
0 votes
# Recursive
# Slower for large lists

def subsets(nums):
    if not nums:
        return [[]]
    
    rest = subsets(nums[1:])
    return rest + [[nums[0]] + s for s in rest]

print(subsets([1, 2, 3]))



'''
run:

[[], [3], [2], [2, 3], [1], [1, 3], [1, 2], [1, 2, 3]]

'''

 



answered Mar 27 by avibootz
0 votes
# Bitmask
# Fast - Not intuitive

def subsets_bitmask(nums):
    n = len(nums)
    result = []
    
    for mask in range(1 << n):
        subset = []
        for i in range(n):
            if mask & (1 << i):
                subset.append(nums[i])
        result.append(subset)
    
    return result

print(subsets_bitmask([1, 2, 3]))



'''
run:

[[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]]

'''

 



answered Mar 27 by avibootz
...