列表分割
本帖最后由 逃兵 于 2021-4-28 22:23 编辑有一个列表 L =
现在想把它切成如下新列表
[, , ]
规则是新列表中的每个元素都是一直升序的
原列表10个元素以内,可以为空列表,里面的元素为1~10并且各不相同
新列表中各个元素的第一个元素为原列表的一个元素
不算,因为3和7之间还有4,6,只算
不算,因为后面还有10,只算
不算,因为不以原列表的第一个元素3为开头
test2:
[, , ]
test3:
[]
test4:
[,,,,,,]
test5:
[,,,,,]
test6:
[,]
test7:
[,,]
新列表要几个元素?你这范围也太广了吧? test2:4,7算不算
46算不算
78算不算
358算不算 qq1151985918 发表于 2021-4-28 17:01
新列表要几个元素?你这范围也太广了吧?
原列表10个元素以内,里面的元素为1~10并且各不相同
新列表中各个元素的第一个元素为原列表的一个元素 hrp 发表于 2021-4-28 17:06
test2:4,7算不算
46算不算
78算不算
补充下哈,以原列表的第一个元素作为开头
这里我不太会形容,就是
后面还有个8,只算
后面还有个8,只算 是最少3个元素最多10个元素吗? 如果原列表是你举个例子好吗?要列举全部还是列举几个? qq1151985918 发表于 2021-4-28 17:18
如果原列表是你举个例子好吗?要列举全部还是列举几个?
最少0个元素也行,题目我补了几个test,可以参考一下题目的含义
[]
我感觉你说的太模糊了,你列举的答案是全部吗?要求输出全部答案吗?
比如说
test4:
[,,,,,]
算不算???感觉还有好多?你是要把结果全部输出吗? 逃兵 发表于 2021-4-28 17:20
最少0个元素也行,题目我补了几个test,可以参考一下题目的含义
看了这个感觉更迷糊了,为什么别的例子可以截取其中一段,这个例子却不可以,是什么规则 qq1151985918 发表于 2021-4-28 17:24
我感觉你说的太模糊了,你列举的答案是全部吗?要求输出全部答案吗?
比如说
test4:
确实是我说的很模糊,我不知道该怎么表达
不算,原列表后面还有9,只算
不算,原列表前面有2,后面有9,只算 hrp 发表于 2021-4-28 17:28
看了这个感觉更迷糊了,为什么别的例子可以截取其中一段,这个例子却不可以,是什么规则
因为1~9是连续的,没有中断过
只能切出来
简单的例子
[,] 本帖最后由 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))
qq1151985918 发表于 2021-4-28 17:47
暴力穷举法,抛砖引玉,等待大佬
打个比方哈
用这个方法跑的实例
把去掉就对了(因为原列表中7与10中间还有个元素9)
,满足 再看看
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))
test4:
[,,,,,]
为什么【1,5,10】不行 本帖最后由 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:} 逃兵 发表于 2021-4-28 17:56
打个比方哈
用这个方法跑的实例
按你这个例子来看,规律是不是:
以第一个元素为最小值,过滤出比它大的所有其他元素,然后升序排比。(假设得到 ls=)
然后
for i in range(len(ls)):
print(ls[:i])
得到 [], , , ——是这样?。。
?
kogawananari 发表于 2021-4-28 19:23
test4:
[,,,,,
可以,实例是我自己写的,就有疏忽了 kogawananari 发表于 2021-4-28 19:59
和你结果不太一样 因为你的题目有点自相矛盾
为什么有
为什么有没有
3和5之间有4,就不要,只保留
没有却有
1和3之间有2,不要,保留
页:
[1]
2