问题
如何判断一个list
包含另一个list
例如我有两个list
List1 = ['a','c','c']List2 = ['x','b','a','x','c','y','c']
如何判断list2
包含了list1
解决方案
如果元素的数量不重要,也就是说只判断list1
里的所有种类在list2
都有出现过,那么使用set()
即可
>>> List1 = ['a','c','c']>>> List2 = ['x','b','a','x','c','y','c']>>> set(List1) < set(List2)True
如果元素的数量也需要考虑,即list1
里的元素必须全部在list2
里出现并且不重复,那么可以考虑使用Counter
from collections import Counterdef counterSubset(list1, list2): counter1 = Counter(list1) counter2 = Counter(list2) for k, v in counter1.items(): if v > counter2[k]: return False return TrueList1 = ['a', 'c', 'c']List2 = ['x', 'b', 'a', 'x', 'c', 'y', 'c']print(counterSubset(List1, List2))
我们还可以使用all()
来简化代码
>>> from collections import Counter>>> List1 = ['a', 'c', 'c']>>> List2 = ['x', 'b', 'a', 'x', 'c', 'y', 'c']>>> counter1 = Counter(List1)>>> counter2 = Counter(List2)>>> print(all(v <= counter2[k] for k, v in counter1.items()))True
讨论
对于set
类型,Python提供了一些操作符来描述两个集合的关系(包含、真包含等等)。而<
操作符描述的是,一个集合是否是另一个集合的真子集
all()
接受一个可迭代对象作为参数,并且判断这个可迭代对象的所有元素是否全部为True
。相应的,还有any()
函数,用来判断是否存在一个True
。
来源
Stack Overflow
关注
欢迎关注我的微信公众号:python每日一练