1生成所有子集:
def get_sub_set(nums):
sub_sets = [[]]
for x in nums:
sub_sets.extend([item + [x] for item in sub_sets])
return sub_sets
2.生成所有非零真子集:
def get_sub_set(nums):
sub_sets = [[]]
for x in nums:
sub_sets.extend([item + [x] for item in sub_sets])
sub_sets.remove([])
sub_sets.remove(nums)
return sub_sets
1,2调用
get_sub_set([1,2,3,4])
结果展示
3.生成指定个数的子集:
class gen_subset:
targetarray=[]#用于存储每一个数对应的二进制数
# maxlen=0
def __init__(self,originarray):
self.originarray=originarray
def dojob(self,length):
maxlen = 2 ** len(self.originarray)
for i in range(maxlen):
str = bin(i).replace('0b', '') # 十进制转2进制
self.targetarray.append(str)
self.buling()
self.generation(length)
def buling(self):
for i in range(len(self.targetarray)):
if (len(self.targetarray[i]) ==len(self.originarray)):
continue;
temp=""
for j in range(len(self.originarray)-len(self.targetarray[i])):
temp=temp+"0" #保证targetarray位数和要生成的集合个数相同,这样设置对应的映射
self.targetarray[i]=temp+self.targetarray[i]
def generation(self,length):
for i in range(len(self.targetarray)):
s=self.targetarray[i]
#subset=[]
subset=""
for j in range(len(s)):
item=s[j]
if(item=="1"):
#获取对应位的这个值,加入到子集
subset=subset+self.originarray[j]
#subset.append(self.originarray[j])
if length==0 or len(subset)==length:
#满足设定要求输出
print(subset)
调用
gen_subset(["1", "2", "3", "4", "5"]).dojob(int(4))
结果展示
4.获取指定长度的子集2:
def get_sub_set(nums):
sub_sets = [[]]
for x in nums:
sub_sets.extend([item + [x] for item in sub_sets])
return sub_sets
def uni_set(uni_set,length):
sub=get_sub_set(uni_set)
sub_set_len=[]
for i in sub:
if len(i)==length:
sub_set_len.append(i)
return sub_set_len
调用
uni_set([1,2,3,4],3)
结果展示
5.指定长度范围的子集:
def get_sub_set(nums):
sub_sets = [[]]
for x in nums:
sub_sets.extend([item + [x] for item in sub_sets])
return sub_sets
def uni_set(uni_set,min_length,max_length):
sub=get_sub_set(uni_set)
sub_set_len=[]
for i in sub:
if min_length<=len(i)<=max_length:
sub_set_len.append(i)
return sub_set_len
调用
uni_set([1,2,3,4,5],3,4)
结果展示