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