首页 > 解决方案 > pythonic方法来查找具有重复项的列表是否至少包含另一个列表的每个元素的副本

问题描述

嗨,我有两个列表reqsup每个列表都可能有重复项,并且 req 可以为空。我想要一种 Pythonic 方法来测试supreq. 作为一个例子,我想要一个包含以下功能的函数:

requirements = [['a','b','b'],['a','c'],[]]
supplys = [['a','b','c'],['b','b','a','c']]
for sup in supplys:
    print(sup)
    for req in requirements:
        print(req)
        print(contains(req,sup))
    print()

输出:

['a', 'b', 'c']
['a', 'b', 'b']
False
['a', 'c']
True
[]
True

['b', 'b', 'a', 'c']
['a', 'b', 'b']
True
['a', 'c']
True
[]
True

我目前所拥有的似乎很冗长,我觉得应该有一种方法可以作为一个单一的班轮来做到这一点。

def contains(req,sup):
    flag = True
    for letter in set(req):
        if self.sup.count(letter) < req.count(letter):
            flag = False
    return flag

标签: python-3.xlist

解决方案


对于后来发现这个问题的任何人,这是我能够想到的单线: all([req.count(letter) <= sup.count(letter) for letter in set(req)])


推荐阅读