我有以下列表:
first=['a','b','c']
second=['a','a']
third=['a','b']
有没有办法比较第二个到第一个所以我得到FALSE,而TRUE用于比较第三个到第一个?我尝试使用集合,但set(second).issubset(first)
返回True,这不是我需要的。
答案 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
。