脚本宝典收集整理的这篇文章主要介绍了

Python每日一练0030

脚本宝典小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望能帮助你少写一行代码,多一份安全和惬意。

问题

如何判断一个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 Counter

def counterSubset(list1, list2):
    counter1 = Counter(list1)
    counter2 = Counter(list2)
    for k, v in counter1.items():
        if v > counter2[k]:
            return False
    return True

List1 = ['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每日一练

总结

以上是脚本宝典为你收集整理的

Python每日一练0030

全部内容,希望文章能够帮你解决

Python每日一练0030

所遇到的程序开发问题,欢迎加入QQ群277859234一起讨论学习。如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典网站推荐给程序员好友。 本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。

80%的人都看过