马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 逃兵 于 2021-4-28 22:23 编辑
有一个列表 L = [3, 4, 6, 10, 2, 7, 1, 5, 8, 9]
现在想把它切成如下新列表
[[3, 4, 6, 10], [3, 4, 6, 7, 8, 9], [3, 4, 5, 8, 9]]
规则是新列表中的每个元素都是一直升序的
原列表10个元素以内,可以为空列表,里面的元素为1~10并且各不相同
新列表中各个元素的第一个元素为原列表的一个元素
[3,7,8,9]不算,因为3和7之间还有4,6,只算[3,4,6,7,8,9]
[3,4,6]不算,因为后面还有10,只算[3,4,6,10]
[1,5,8,9]不算,因为不以原列表的第一个元素3为开头
test2:
[4, 7, 6, 1, 3, 5, 8, 2]
[[4, 7, 8], [4, 6, 8], [4, 5, 8]]
test3:
[10, 7, 5, 8, 9, 4, 1, 6, 2, 3]
[[10]]
test4:
[1, 7, 5, 10, 8, 2, 4, 3, 6, 9]
[[1,7,10],[1,7,8,9],[1,5,10],[1,5,8,9],[1,5,6,9],[1,2,4,6,9],[1,3,6,9]]
test5:
[2, 7, 3, 6, 10, 8, 5, 4, 1, 9]
[[2,7,10],[2,7,8,9],[2,3,6,10],[2,3,6,8,9],[2,3,5,9],[2,3,4,9]]
test6:
[1,3,2,4]
[[1,3,4],[1,2,4]]
test7:
[1,4,5,3,2]
[[1,4,5],[1,3],[1,2]]
再看看 import itertools,random
lst = [1,2,3,4,5,6,7,8,9,10]
data = random.sample(lst,len(lst))
print(data)
res = []
for i in range(len(data),0,-1):
for j in itertools.combinations(data,i):
if (list(j) == sorted(list(j)) and
j[0] == data[0] and
j[-1] >= max(data[data.index(j[-1]):])):
isadd = True
for k in res:
if set(j).issubset(set(k)):
isadd = False
break
if isadd:
print(list(j))
res.append(list(j))
|