python 实现穷举组合

最近进行一项统计需要穷举一个列表元素的所有组合,通过查询以及自己摸索,总结出了一下三种方法:
方法1:
通过循环迭代的方式返回结果

def PowerSetsRecursive(items):
  subsets = []
  first_elt = items[0] #first element
  rest_list = items[1:] 
  for partial_sebset in PowerSetsRecursive(rest_list):
    subsets.append(partial_sebset)
    next_subset = partial_sebset[:] +[first_elt]
    subsets.append(next_subset)
  return subsets

方法2:
也是通过循环迭代的方式进行列举,不过代码更精炼

def PowerSetsRecursive2(items):
  result = [[]]
  for x in items:
    result.extend([subset + [x] for subset in result])
  return result

方法3:
通过位运算符的方式,值得好好研究一下

def PowerSetsBinary(items): 
  N = len(items) 
  for i in range(2**N): 
    combo = [] 
    for j in range(N): 
      if(i >> j ) % 2 == 1: 
        combo.append(items[j]) 
    print(combo)

方法4:
我对方法3研究的过程中受到启发,其实穷举组合其实就是二进制每一位0/1组合的过程,所以我自己写了一个更容易理解的

n=len(items)
for i in range(2**n):
    aa=str(bin(i))[2:].rjust(4,'0') # 转化为2进制,并补全左侧位数
    combo=[]
    for j in range(len(aa)):
        if aa[j]=='1':
            combo.append(items[j])
    print(combo)

你可能感兴趣的:(python学习)