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

2024-04-19 10:50:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下清单:

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只返回唯一的值。你知道吗


Tags: l1列表s6sets5s1l2s10
3条回答
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)

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

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']]

可以使用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']]

相关问题 更多 >