>我有以下列表:
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
。