如何在 Python 中检查一个列表是否是另一个列表的一部分



>我有以下列表:

first=['a','b','c']  
second=['a','a']  
third=['a','b']

有没有办法比较第二个到第一个,所以我得到 FALSE,而将第三个与第一个进行比较是 TRUE?我尝试使用集合,但set(second).issubset(first)返回 True,这不是我需要的。

first=['a','b','c']  
second=['a','a']  
third=['a','b']
def sub_set(lst1, lst2):  
    tmp = lst2[:] 
    for i in lst1:
        if i in tmp:
            tmp.remove(i)
        else:
            return False
    return True
print sub_set(second, first)
print sub_set(third, first)

输出

False
True

如果顺序很重要并且元素需要连续,您可以将列表转换为字符串(带有join(并使用它:

first=['a','b','c']
second=['a','a']
third=['a','b']
def is_sublist(sublist, reflist):
    return ''.join(sublist) in ''.join(reflist)
print(is_sublist(sublist=second, reflist=first))
print(is_sublist(sublist=third, reflist=first))

您可以使用切片进行比较:

>>> first = ['a', 'b', 'c']
>>> second = ['a', 'a']
>>> third = ['a', 'b']
>>> second == first[:len(second)]
False
>>> third == first[:len(third)]
True

如果顺序无关紧要,您可以使用计数字典:

diffs = {a : second.count(a) - first.count(a) for a in second}
diffs_list = list(diffs1.values())
is_subset = len(diffs_list) == diffs_list.count(0)

这为third返回True,为second返回False

这仅计算超集中子集的每个元素的出现次数,计算每个计数的差值,然后验证所有差值是否0

最新更新