查找列表的所有可能的子列表
发布于 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 个回答
-
一个简单,未经优化的解决方案是
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