逃兵 发表于 2021-4-28 16:40:53

列表分割

本帖最后由 逃兵 于 2021-4-28 22:23 编辑

有一个列表 L =
现在想把它切成如下新列表
[, , ]
规则是新列表中的每个元素都是一直升序的
原列表10个元素以内,可以为空列表,里面的元素为1~10并且各不相同
新列表中各个元素的第一个元素为原列表的一个元素
不算,因为3和7之间还有4,6,只算
不算,因为后面还有10,只算
不算,因为不以原列表的第一个元素3为开头





test2:

[, , ]

test3:

[]

test4:

[,,,,,,]

test5:

[,,,,,]

test6:

[,]

test7:

[,,]

qq1151985918 发表于 2021-4-28 17:01:22

新列表要几个元素?你这范围也太广了吧?

hrp 发表于 2021-4-28 17:06:20

test2:4,7算不算
46算不算
78算不算
358算不算

逃兵 发表于 2021-4-28 17:06:58

qq1151985918 发表于 2021-4-28 17:01
新列表要几个元素?你这范围也太广了吧?

原列表10个元素以内,里面的元素为1~10并且各不相同
新列表中各个元素的第一个元素为原列表的一个元素

逃兵 发表于 2021-4-28 17:11:45

hrp 发表于 2021-4-28 17:06
test2:4,7算不算
46算不算
78算不算


补充下哈,以原列表的第一个元素作为开头
这里我不太会形容,就是
后面还有个8,只算
后面还有个8,只算

qq1151985918 发表于 2021-4-28 17:17:13

是最少3个元素最多10个元素吗?

qq1151985918 发表于 2021-4-28 17:18:20

如果原列表是你举个例子好吗?要列举全部还是列举几个?

逃兵 发表于 2021-4-28 17:20:56

qq1151985918 发表于 2021-4-28 17:18
如果原列表是你举个例子好吗?要列举全部还是列举几个?

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


[]

qq1151985918 发表于 2021-4-28 17:24:41

我感觉你说的太模糊了,你列举的答案是全部吗?要求输出全部答案吗?
比如说
test4:

[,,,,,]

算不算???感觉还有好多?你是要把结果全部输出吗?

hrp 发表于 2021-4-28 17:28:43

逃兵 发表于 2021-4-28 17:20
最少0个元素也行,题目我补了几个test,可以参考一下题目的含义




看了这个感觉更迷糊了,为什么别的例子可以截取其中一段,这个例子却不可以,是什么规则

逃兵 发表于 2021-4-28 17:29:04

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


确实是我说的很模糊,我不知道该怎么表达
不算,原列表后面还有9,只算
不算,原列表前面有2,后面有9,只算

逃兵 发表于 2021-4-28 17:45:39

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

因为1~9是连续的,没有中断过
只能切出来
简单的例子

[,]

qq1151985918 发表于 2021-4-28 17:47:54

本帖最后由 qq1151985918 于 2021-4-29 08:38 编辑

暴力穷举法,抛砖引玉,等待大佬
import itertools,random

lst =
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 == data and
            j[-1] >= max(data):])):
            isadd = True
            for k in res:
                if set(j).issubset(set(k)):
                  isadd = False
                  break
            if isadd:
                print(list(j))
                res.append(list(j))

逃兵 发表于 2021-4-28 17:56:40

qq1151985918 发表于 2021-4-28 17:47
暴力穷举法,抛砖引玉,等待大佬

打个比方哈
用这个方法跑的实例




把去掉就对了(因为原列表中7与10中间还有个元素9)
,满足

qq1151985918 发表于 2021-4-28 18:21:26

再看看
import itertools,random

lst =
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 == data and
            j[-1] >= max(data):])):
            isadd = True
            for k in res:
                if set(j).issubset(set(k)):
                  isadd = False
                  break
            if isadd:
                print(list(j))
                res.append(list(j))

kogawananari 发表于 2021-4-28 19:23:25

test4:

[,,,,,]

为什么【1,5,10】不行

kogawananari 发表于 2021-4-28 19:59:28

本帖最后由 kogawananari 于 2021-4-28 20:25 编辑

class MyNode():
    def __init__(self, root, head=None):
      self.head = head
      self.root = root
      self.children = []
   
    def append_child(self, n):
      if not self.children:
            if n > self.root:
                self.children.append(MyNode(n, self))
            return
      if self.root < n < self.children[-1].root:
            self.children.append(MyNode(n, self))
      else:
            for node in self.children:
                node.append_child(n)
   
    def __repr__(self):
      if not self.children:
            return f'{self.root}'
      return f'{self.root}{self.children}'

class MyTree(MyNode):
    def __init__(self, nums):
      self.head = None
      self.root = nums
      self.children = []
      for n in nums:
            self.append_child(n)
   
def lujing(node):
    lu = []
    def deeph(n):
      i = []
      while 1:
            i.insert(0,n.root)
            if n.head is None: break
            n = n.head
      return i
    def tannv(n):
      for i in n.children:
            if not i.children:
                lu.append(deeph(i))
            else:
                tannv(i)
    tannv(node)
    return lu

t = MyTree()
print(lujing(t))

# 写死我了 思路是树(或者命名元组)的递归遍历 head确定父节点
# 我的结果[, , , , , , ]

和你结果不太一样 因为你的题目有点自相矛盾
为什么有没有
没有却有

{:10_244:}

阿奇_o 发表于 2021-4-28 20:02:30

逃兵 发表于 2021-4-28 17:56
打个比方哈
用这个方法跑的实例



按你这个例子来看,规律是不是:

以第一个元素为最小值,过滤出比它大的所有其他元素,然后升序排比。(假设得到 ls=)
然后
for i in range(len(ls)):
   print(ls[:i])

得到 [], , ,     ——是这样?。。


逃兵 发表于 2021-4-28 22:21:54

kogawananari 发表于 2021-4-28 19:23
test4:

[,,,,,

可以,实例是我自己写的,就有疏忽了

逃兵 发表于 2021-4-28 22:23:17

kogawananari 发表于 2021-4-28 19:59
和你结果不太一样 因为你的题目有点自相矛盾
为什么有

为什么有没有
3和5之间有4,就不要,只保留
没有却有
1和3之间有2,不要,保留
页: [1] 2
查看完整版本: 列表分割