Python 如何从其他列表中选择不包含有序序列的列表?

Python 如何从其他列表中选择不包含有序序列的列表?,python,list,Python,List,如何选择不包括sl中包含的所有有序序列的列表?这是一个代码: l = [ ['s1', 's5', 's6', 's8', 's10', 's5'], ['s1', 's5', 's8', 's10', 's5', 's6', 's8', 's15', 's23'], ['s1', 's5', 's6', 's10', 's14'] ] sl = [['s5','s6','s8'],['s15', 's23']] from more_itertools import windowed

如何选择不包括sl中包含的所有有序序列的列表?这是一个代码:

l = [
 ['s1', 's5', 's6', 's8', 's10', 's5'],
 ['s1', 's5', 's8', 's10', 's5', 's6', 's8', 's15', 's23'],
 ['s1', 's5', 's6', 's10', 's14']
]
sl = [['s5','s6','s8'],['s15', 's23']]


from more_itertools import windowed
from functools import partial

def ordered_check(x, sub):
    s = tuple(sub)
    for y in windowed(x, len(sub)):
        if s == y:
            return True
    return False

def ordered_check_all(x, subs):
    return any(~ordered_check(x, sub) for sub in subs)

def check_factory(subs):
    return partial(ordered_check_all, subs=subs)

list(filter(check_factory(sl), l))
预期的输出是此输出,因为它不包含sl的所有有序序列:

但是,如果我运行此代码,它将返回l的所有子列表。不确定为什么任何~ordered_检查都不起作用

更新:

我试着用答案中建议的不一样来代替~。但它不适用于以下示例:

l = [['p4', 'p5', 'p7', 'p9', 'p11', 'p13', 'p15', 'p13', 'p15', 'p23', 'p19', 'p21', 'p16', 'p17', 'p18', 'p16', 'p25'], 
     ['p4', 'p5', 'p7', 'p9', 'p11', 'p13', 'p15', 'p13', 'p15', 'p23', 'p19', 'p21', 'p16', 'p25'], 
     ['p4', 'p5', 'p7', 'p9', 'p11', 'p13', 'p15', 'p13', 'p15', 'p23', 'p20', 'p22', 'p20', 'p23', 'p19', 'p21', 'p16', 'p17', 'p18', 'p16', 'p25'],
     ['p4', 'p5', 'p7', 'p9', 'p11', 'p13', 'p15', 'p13', 'p15', 'p23', 'p20', 'p22', 'p20', 'p23', 'p19', 'p21', 'p16', 'p25']
]

sl = 
[
 ['p15', 'p23', 'p15'],
 ['p13', 'p15', 'p13', 'p15', 'p14'],
 ['p14', 'p15', 'p14', 'p15', 'p13'],
 ['p13', 'p15', 'p23', 'p19'],
 ['p13', 'p15', 'p23', 'p20'],
 ['p14', 'p15', 'p23', 'p19'],
 ['p14', 'p15', 'p23', 'p20']
]
您应该替换:

any(~ordered_check


基本上,您可以使用下一种方法检查一个列表是否包含在另一个列表中,而无需中断顺序:

def contains_list(list_1, list_2):
    n = len(list_1) 
    return any(list_1 == list_2[i:i + n] for i in range(len(list_2)-n + 1)) 
然后,您可以在此方法上传递sl变量的不同列表:

result = []
for check_list in sl:
   if not any(contains_list(check_list, source_list) for source_list in l)
       result.append(check_list)

print(result)
注意:很抱歉,我现在无法在手机上尝试该代码,因此可能它无法100%工作


希望有帮助。

可能重复:谢谢。由于某种原因,它不起作用。请检查我的更新。
def contains_list(list_1, list_2):
    n = len(list_1) 
    return any(list_1 == list_2[i:i + n] for i in range(len(list_2)-n + 1)) 
result = []
for check_list in sl:
   if not any(contains_list(check_list, source_list) for source_list in l)
       result.append(check_list)

print(result)