本程序先生成一个列表的所有子列表,然后把那些子列表中数值越来越小的列表去掉,即求一个列表的所有非降子列表。
##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))
发表评论