繁体   English   中英

如何检查子集是否包含在列表中?

[英]How do I check that a subset is included in a list?

我有以下列表:

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

我想删除所有不符合以下约束的列表:列表必须包含['s5','s6','s8']['s15', 's23']

l1 = ['s5','s6','s8']
l2 = ['s15', 's23']

预期结果是:

[
 ['s1', 's5', 's6', 's8', 's10', 's5', 's15', 's23'],
 ['s1', 's5', 's8', 's10', 's5', 's6', 's8', 's15', 's23']
]

我该怎么做?

我尝试使用set(l1).issubset(t)set(l2).issubset(l) ,但set只返回唯一值。

您可以使用filterset来检查条件。

使用filter ,您也可以维护订单

>>> list(filter(lambda x : not(set(l1+l2)-set(x)), l))
>>> [['s1', 's5', 's6', 's8', 's10', 's5', 's15', 's23'], 
     ['s1', 's5', 's8', 's10', 's5', 's6', 's8', 's15', 's23']]

我想你可以做一个会员检查:

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

l1_s = ''.join(l1)
l2_s = ''.join(l2)

print([x for x in l if l1_s in ''.join(x) and l2_s in ''.join(x)])

# [['s1', 's5', 's6', 's8', 's10', 's5', 's15', 's23'],
#  ['s1', 's5', 's8', 's10', 's5', 's6', 's8', 's15', 's23']]
l1 = ['s5', 's6', 's8']
l2 = ['s15', 's23']
l = [
    ['s1', 's5', 's6', 's8', 's10', 's5', 's15', 's23'],
    ['s1', 's5', 's8', 's10', 's5', 's6', 's8', 's15', 's23'],
    ['s1', 's5', 's6', 's10', 's14', 's15', 's23']
]

result = []
for a in l:
    found = True

    for x in l1:
        if x not in a:
            found = False
    for x in l2:
        if x not in a:
            found = False
    if found:
        result.append(a)

print(result)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM