查找列表的所有可能的子列表

发布于 2021-01-29 16:01:09

假设我有以下清单

[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]

我想找到某个长度的所有可能的子列表,其中它们不包含一个特定的数字,并且不会丢失数字的顺序。

例如,所有长度为6而不是12的子列表为:

[1,2,3,4,5,6]
[2,3,4,5,6,7]
[3,4,5,6,7,8]
[4,5,6,7,8,9]
[5,6,7,8,9,10]
[6,7,8,9,10,11]
[13,14,15,16,17,18]

问题是我想在很大的范围内做到这一点,并且我想要最快的方法。

用我的方法更新:

oldlist = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
newlist = []
length = 6
exclude = 12
for i in oldlist:
   if length+i>len(oldlist):
       break
   else:
       mylist.append(oldlist[i:(i+length)]
for i in newlist:
    if exclude in i:
       newlist.remove(i)

我知道这不是最好的方法,这就是为什么我需要更好的方法。

关注者
0
被浏览
137
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    一个简单,未经优化的解决方案是

    result = [sublist for sublist in 
            (lst[x:x+size] for x in range(len(lst) - size + 1))
            if item not in sublist
        ]
    

    优化版本:

    result = []
    start = 0
    while start < len(lst):
        try:
            end = lst.index(item, start + 1)
        except ValueError:
            end = len(lst)
        result.extend(lst[x+start:x+start+size] for x in range(end - start - size + 1))
        start = end + 1
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看