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

时间:2018-04-14 08:39:07

标签: python list set

我有以下列表:

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

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

如果订单很重要且元素需要顺序,您可以将列表转换为字符串(使用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))

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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)

返回True的{​​{1}}和third的{​​{1}}。

这只是计算超集中子集的每个元素的出现次数,计算每个计数的差异,然后验证所有差异是False