Python中的子集

假设我们有一组数字;我们必须生成该集合的所有可能子集。这也称为功率设定。因此,如果集合类似于[1,2,3],则幂集将为[[],[1],[2],[3],[1,2],[1,3],[2 ,3],[1,2,3]]

让我们看看步骤-

  • 我们将使用递归方法解决此问题。因此,如果递归方法名称称为solve(),并且采用数字(数字),临时集合(临时),res和索引的集合

  • solve()方法将如下所示工作-

  • 如果index = nums的长度,则创建一个与temp相同的列表,并插入res并返回

  • temp [index]:= 0

  • solve(nums,temp,res,index + 1)

  • temp [index]:= 1

  • solve(nums,temp,res,index + 1)

  • 主要功能如下所示-

  • res:=空列表

  • 创建大小与数字相同的临时列表,并用0填充

  • 调用solve(nums,temp,res,0)

  • main_res:=一个空列表

  • 对于temp_res中的所有列表

    • 如果lists [i] = 1,则将nums [i]插入到temp

    • temp:=空列表

    • 对于我:= 0到列表的长度

    • 将temp插入main_res

    • 返回主要资源

    让我们看下面的实现以更好地理解-

    示例

    class Solution(object):
       def subsets(self, nums):
          temp_result = []
          self.subsets_util(nums,[0 for i in range(len(nums))],temp_result,0)
          main_result = []
          for lists in temp_result:
             temp = []
             for i in range(len(lists)):
                if lists[i] == 1:
                   temp.append(nums[i])
             main_result.append(temp)
          return main_result
       def subsets_util(self,nums,temp,result,index):
          if index == len(nums):
             result.append([i for i in temp])
             #print(temp)
             return
          temp[index] = 0
          self.subsets_util(nums,temp,result,index+1)
          temp[index] = 1
          self.subsets_util(nums, temp, result,index + 1)
    ob1 = Solution()print(ob1.subsets([1,2,3,4]))

    输入值

    [1,2,3,4]

    输出结果

    [[], [4], [3], [3, 4], [2], [2, 4], [2, 3], [2, 3, 4], [1], [1, 4], 
    [1, 3], [1, 3, 4], [1, 2], [1, 2, 4], [1, 2, 3], [1, 2, 3, 4]]