Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Getting the subsets of a set in Python
- def subsets(s):
- """Return a list of the subsets of s.
- >>> subsets({True, False})
- [{False, True}, {False}, {True}, set()]
- >>> counts = {x for x in range(10)} # A set comprehension
- >>> subs = subsets(counts)
- >>> len(subs)
- 1024
- >>> counts in subs
- True
- >>> len(counts)
- 10
- """
- assert type(s) == set, str(s) + ' is not a set.'
- if not s:
- return [set()]
- element = s.pop()
- rest = subsets(s)
- s.add(element)
- from itertools import chain, combinations
- def powerset(iterable):
- "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
- s = list(iterable)
- return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
- def subsets(s):
- return map(set, powerset(s))
- >>> from itertools import combinations
- >>> s=set(range(10))
- >>> subs = [set(j) for i in range(len(s)) for j in combinations(s, i+1)]
- >>> len(subs)
- 1023
- def powerset(elements):
- if len(elements) > 0:
- head = elements[0]
- for tail in powerset(elements[1:]):
- yield [head] + tail
- yield tail
- else:
- yield []
- >>> s=set(range(10))
- >>> L=list(s)
- >>> subs = [{L[j] for j in range(len(L)) if 1<<j&i} for i in range(1,1<<len(L))]
- >>> s in subs
- True
- >>> set() in subs
- False
- >>> from itertools import combinations
- >>> s=set([1,2,3])
- >>> sum(map(lambda r: list(combinations(s, r)), range(1, len(s)+1)), [])
- [(1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]
Add Comment
Please, Sign In to add comment