70 lines
1.3 KiB
Python
70 lines
1.3 KiB
Python
from math import log
|
|
|
|
def powerset(xs):
|
|
result = [[]]
|
|
for x in xs:
|
|
newsubsets = [subset + [x] for subset in result]
|
|
result.extend(newsubsets)
|
|
return result
|
|
|
|
def powerset2(orig, newset):
|
|
if orig == []:
|
|
return [newset]
|
|
else:
|
|
res = []
|
|
for s in powerset2(orig[1:], newset+[orig[0]]):
|
|
res.append(s)
|
|
for s in powerset2(orig[1:], newset):
|
|
res.append(s)
|
|
return res
|
|
|
|
def powerset3(orig, newset):
|
|
if orig == []:
|
|
yield newset
|
|
else:
|
|
for s in powerset3(orig[1:], newset+[orig[0]]):
|
|
yield s
|
|
for s in powerset3(orig[1:], newset):
|
|
yield s
|
|
|
|
def powerset4(lst):
|
|
if len(lst) <= 1:
|
|
yield lst
|
|
yield []
|
|
else:
|
|
for x in powerset4(lst[1:]):
|
|
yield [lst[0]] + x
|
|
yield x
|
|
|
|
def powerset5(lst):
|
|
if lst == []:
|
|
yield []
|
|
else:
|
|
for s in powerset5(lst[1:]):
|
|
yield s + [lst[0]]
|
|
yield s
|
|
|
|
def powerset6(lst):
|
|
pairs = [(2**i, x) for i, x in enumerate(lst)]
|
|
for i in xrange(2**len(pairs)):
|
|
yield [x for (mask, x) in pairs if i & mask]
|
|
|
|
if __name__ == '__main__':
|
|
l = [1,2,3]
|
|
|
|
# print(powerset(l))
|
|
# print(powerset2(l, []))
|
|
# print list(powerset3(l, []))
|
|
# print list(powerset4(l))
|
|
# print list(powerset5(l))
|
|
# print list(powerset6(l))
|
|
|
|
# n = 8
|
|
# for i in range(n):
|
|
# b = str(bin(i))[2:]
|
|
# if n % 2 != 0:
|
|
# l = int(1.0+len(n, 2))
|
|
# else:
|
|
# l = int(log(n, 2))
|
|
# b = '0'*(l - len(b)) + b
|
|
# print b |