习题 子集和问题-1:写出集合A = [5, -2, 4, 2]的所有子集。
1.定义一个函数get_sub(list),传入参数为一个列表list:
def get_subs ( list ) :
res = [ ]
for i in range ( 2 ** len ( list ) ) :
sub = [ ]
for j in range ( len ( list ) ) :
if ( i >> j) % 2 == 1 :
sub. append( list [ j] )
res. append( sub)
return res
2.在主函数中调用该函数:
if __name__ == "__main__" :
A = [ 5 , - 2 , 4 , 2 ]
list1 = get_subs( A)
print ( list1)
3.最后的结果为:
[ [ ] , [ 5 ] , [ - 2 ] , [ 5 , - 2 ] , [ 4 ] , [ 5 , 4 ] , [ - 2 , 4 ] , [ 5 , - 2 , 4 ] , [ 2 ] , [ 5 , 2 ] , [ - 2 , 2 ] , [ 5 , - 2 , 2 ] , [ 4 , 2 ] , [ 5 , 4 , 2 ] , [ - 2 , 4 , 2 ] , [ 5 , - 2 , 4 , 2 ] ]
习题 子集和问题-2:写出集合A = [5, -2, 4, 2]中,子集和等于k(整数)的所有子集的集合。
1.定义一个函数get_sub_equals_sum(items, k),传入参数为一个集合items和一个整数k:
def get_sub_equals_sum ( items, k) :
result = [ ]
N = len ( items)
for i in range ( 2 ** N) :
sub = [ ]
for j in range ( N) :
if ( i >> j) % 2 == 1 :
sub. append( items[ j] )
if sum ( sub) == k:
result. append( sub)
return result
2.在主函数中调用该方法求得结果:
if __name__ == "__main__" :
A = [ 5 , - 2 , 4 , 2 ]
list2 = get_sub_equals_sum( A, 2 )
list3 = get_sub_equals_sum( A, 7 )
3.输出结果为:
[ [ - 2 , 4 ] , [ 2 ] ]
[ [ 5 , - 2 , 4 ] , [ 5 , 2 ] ]