仅当项目的出现次数匹配时,检查列表是否是另一个列表的子集

时间:2018-04-02 08:08:22

标签: python python-3.x list

我知道子集以及如果列表与另一个列表匹配但他们如何找到但我已经意识到我的代码没有考虑重复的字母。

word = ["b", "e", "e"]
given_letters = ["b", "e", "p", "w"]

if set(word).issubset(given_letters): 
    print("Within the given letters' limits.")

这将打印出我放置的句子,但我不想要它,因为它不是完全匹配。

基本上,我希望它接受['b','e']因为它匹配'e'出现的次数但是拒绝['b','e','e']因为该列表包含一个比'given_letters'更多'e'。

有人有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我建议使用collections.Counter

from collections import Counter

def is_sublist(check_list, base_list):
    base_list_counter = Counter(base_list)
    check_list_counter = Counter(check_list)
    for letter, occurances in check_list_counter.items():
        if occurances > base_list_counter[letter]:
            return False
    return True

assert not is_sublist(["b", "e", "e"], ["b", "e", "p", "w"])
assert is_sublist(["b", "e", "e"], ["b", "e", "e", "p", "w"])

答案 1 :(得分:0)

这应该有所帮助。

(4 | 1 | 2 | 3 | 4 | 5)

答案 2 :(得分:0)

如果我的问题正确,你正在寻找单行代码:

word = ["b", "e", "e"]
given_letters = ["b", "e", "p", "e","w"]
if(all(True if word.count(item) <= given_letters.count(item) else False for item in word)):
    print("Within the given letters' limits.")
else:
    print ("Whatever you want")