求一个列表的所有非降子列表

求一个列表的所有非降子列表

本程序先生成一个列表的所有子列表,然后把那些子列表中数值越来越小的列表去掉,即求一个列表的所有非降子列表。

##from itertools import chain, combinations
##
##def all_sublists(l):
##    """itertools.chain()可接受一个或多个可迭代对象作为参数,
##       然后会创建一个迭代器,该迭代器可连续访问并返回提供的
##       每个可迭代对象中的元素;
##    """
##    return chain(*(combinations(l, i) for i in range(len(l) + 1)))

def nondecsub(l):
    from itertools import chain, combinations
    finish = []
    r = chain(*(combinations(l, i) for i in range(len(l) + 1)))
    for a in r:
       flag = True  #[-1,0,3,4,3,5]
       for i in range(len(a)-1):
           if a[i]>a[i+1]:
               flag = False
               break
       if flag:finish.append(list(a))
    return finish
           
arr = [4]
arr = [-1,0,3,4,3,5]
print(nondecsub(arr))

李兴球

李兴球的博客是Python创意编程原创博客