鱼C论坛

 找回密码
 立即注册
查看: 4473|回复: 24

[已解决]列表分割

[复制链接]
发表于 2021-4-28 16:40:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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]]

最佳答案
2021-4-28 18:21:26
再看看
  1. import itertools,random

  2. lst = [1,2,3,4,5,6,7,8,9,10]
  3. data = random.sample(lst,len(lst))

  4. print(data)

  5. res = []
  6. for i in range(len(data),0,-1):
  7.     for j in itertools.combinations(data,i):
  8.         if (list(j) == sorted(list(j)) and
  9.             j[0] == data[0] and
  10.             j[-1] >= max(data[data.index(j[-1]):])):
  11.             isadd = True
  12.             for k in res:
  13.                 if set(j).issubset(set(k)):
  14.                     isadd = False
  15.                     break
  16.             if isadd:
  17.                 print(list(j))
  18.                 res.append(list(j))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-4-28 17:06:58 | 显示全部楼层
qq1151985918 发表于 2021-4-28 17:01
新列表要几个元素?你这范围也太广了吧?

原列表10个元素以内,里面的元素为1~10并且各不相同
新列表中各个元素的第一个元素为原列表的一个元素
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-28 17:11:45 | 显示全部楼层
hrp 发表于 2021-4-28 17:06
test2:4,7算不算
46算不算
78算不算

补充下哈,以原列表的第一个元素作为开头
这里我不太会形容,就是
[4,7]后面还有个8,只算[4,7,8]
[4,6]后面还有个8,只算[4,6,8]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-28 17:20:56 | 显示全部楼层
qq1151985918 发表于 2021-4-28 17:18
如果原列表是[1,2,3,4,5,6,7,8,9,10]你举个例子好吗?要列举全部还是列举几个?

最少0个元素也行,题目我补了几个test,可以参考一下题目的含义

[1,2,3,4,5,6,7,8,9,10]
[[1,2,3,4,5,6,7,8,9,10]]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-28 17:29:04 | 显示全部楼层
qq1151985918 发表于 2021-4-28 17:24
我感觉你说的太模糊了,你列举的答案是全部吗?要求输出全部答案吗?
比如说
test4:

确实是我说的很模糊,我不知道该怎么表达
[1,5,8]不算,原列表后面还有9,只算[1,5,8,9]
[1,4,6]不算,原列表前面有2,后面有9,只算[1,2,4,6,9]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-28 17:45:39 | 显示全部楼层
hrp 发表于 2021-4-28 17:28
看了这个感觉更迷糊了,为什么别的例子可以截取其中一段,这个例子却不可以,是什么规则

因为1~9是连续的,没有中断过
只能切出来[1,2,3,4,5,6,7,8,9]
简单的例子
[1,3,2,4]
[[1,3,4],[1,2,4]]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-28 17:56:40 | 显示全部楼层
qq1151985918 发表于 2021-4-28 17:47
暴力穷举法,抛砖引玉,等待大佬

打个比方哈
用这个方法跑的实例
  1. [7, 9, 5, 4, 2, 1, 10, 3, 8, 6]
  2. [7, 10]
  3. [7, 8]
  4. [7, 9, 10]
复制代码

把[7,10]去掉就对了(因为原列表中7与10中间还有个元素9)
[7,9,10],[7,8]满足
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-28 22:21:54 | 显示全部楼层
kogawananari 发表于 2021-4-28 19:23
test4:
[1, 7, 5, 10, 8, 2, 4, 3, 6, 9]
[[1,7,10],[1,7,8,9],[1,5,8,9],[1,5,6,9],[1,2,4,6,9],[1,3,6, ...

[1,5,10]可以,实例是我自己写的,就有疏忽了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-28 22:23:17 | 显示全部楼层
kogawananari 发表于 2021-4-28 19:59
和你结果不太一样 因为你的题目有点自相矛盾  
为什么[3, 4, 6, 10, 2, 7, 1, 5, 8, 9]有[3, 4, 5, 8,  ...

为什么[3, 4, 6, 10, 2, 7, 1, 5, 8, 9]有[3, 4, 5, 8, 9]没有[3, 5, 8, 9]
3和5之间有4,就不要[3, 5, 8, 9],只保留[3, 4, 5, 8, 9]
[1, 7, 5, 10, 8, 2, 4, 3, 6, 9]没有[1, 2, 3, 6, 9]却有[1,3,6,9]
1和3之间有2,不要[1, 3, 6, 9],保留[1, 2, 3, 6, 9]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-28 22:26:44 | 显示全部楼层

牛逼,我说的那么模糊都能写出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-29 15:08:27 | 显示全部楼层
kogawananari 发表于 2021-4-28 23:04
试了一下我的和最佳写的算出来的结果也没啥区别 只是看不懂

没错,只是他的早,评分给你补上
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-29 15:13:40 | 显示全部楼层
kogawananari 发表于 2021-4-28 23:04
试了一下我的和最佳写的算出来的结果也没啥区别 只是看不懂

非常感激,我对树算法的学习也很需要,因为昨天晚上用的比较急,没有往后看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-9 03:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表