# -*- coding: UTF-8 -*-
'''
列出一个列表所有子集,包括空集合
可以通过二进制数来确定某个元素是否选取
另外有个递归的方法可以实现
'''
#1 这里有个坑,bin转换出来的字符串有0b前缀,如bin(9)为‘0b1001’
#处理时需排除掉'0b',从下标2开始处理
#2 另外的问题,bin转换的二进制字符串不懂怎么格式化为固定位数,不够补前导零
# 其实避开这两个问题,可以自己写整数转二进制串的函数
def ListTheSubSetByBinary(listSet):
lenthOfListSet=len(listSet)
if lenthOfListSet == 0:
print listSet
return
else:
for i in range(0, 2**lenthOfListSet):
listTemp=[]
strTemp=bin(i)
indexOfList=2
for index in range(len(strTemp)-1, 1, -1 ):
if strTemp[index] == '1':
listTemp.insert(0, listSet[ indexOfList ] )
indexOfList-=1
print "##########%d %s %s" %(i, bin(i), listTemp)
ListTheSubSetByBinary(['hong2',8,'gh'])
集合的子集 (其实是组合问题)
最新推荐文章于 2020-05-27 10:34:55 发布