Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用any()函数的Python筛选数组_Python_Arrays_Any - Fatal编程技术网

使用any()函数的Python筛选数组

使用any()函数的Python筛选数组,python,arrays,any,Python,Arrays,Any,我试图编写一个程序,通过两种输入来推荐书籍: 客户准备花费的最大金额。 由所有期望属性(恐怖、科幻、浪漫、幻想)的首字母组成的字符串。 所需的属性输入应该是一个字符串,如sh或shf。顺序应该无关紧要,因此字符串shf被视为与fhs相同 我已经成功地创建了一个过滤器,可以过滤出超出客户最大成本的书籍。但是,该功能会继续输出用户提供的任何类别中的任何书籍,而不是满足所有所需类别的书籍,例如,幻想和浪漫的书籍。我试图用all函数替换any函数,但这似乎并没有纠正这个问题。有人能就我的错误提出建议吗

我试图编写一个程序,通过两种输入来推荐书籍:

客户准备花费的最大金额。 由所有期望属性(恐怖、科幻、浪漫、幻想)的首字母组成的字符串。 所需的属性输入应该是一个字符串,如sh或shf。顺序应该无关紧要,因此字符串shf被视为与fhs相同

我已经成功地创建了一个过滤器,可以过滤出超出客户最大成本的书籍。但是,该功能会继续输出用户提供的任何类别中的任何书籍,而不是满足所有所需类别的书籍,例如,幻想和浪漫的书籍。我试图用all函数替换any函数,但这似乎并没有纠正这个问题。有人能就我的错误提出建议吗

def推荐书籍最高价格,猫: 如果未设置cats.issubsetbook\u类别: raise VALUERRORF“{cats}包含无效的类别代码” cats_f=[cat代表cat_i,cat在book_类别中。如果cat_i在setcats中,则为items] return[逐册、价格、帐簿中的猫数据]
如果price在您的评论后编辑我的答案:

过滤中的第二个条件应为:

all(elem in cats for elem in cats_f)
以及完整的功能:

def recommend_books(max_price, cats):
        if not set(cats).issubset(set(book_categories)):
            raise ValueError(f'{cats} contains an invalid category code')
        cats_f = [cat for cat_i, cat in book_categories.items() if cat_i in set(cats)]
        return [book for book, price, cats in book_data 
                if (price <= max_price and **all (True for cat in cats if cat in cats_f))**]
迭代所有你想要的分类,并检查它们是否都在书的分类中

这将产生所需的输出。

这应该可以做到:

def recommend_books(max_price, cats):
    if not set(cats).issubset(set(book_categories)):
        raise ValueError(f'{cats} contains an invalid category code')
    cats_f = [cat for cat_i, cat in book_categories.items() if cat_i in set(cats)]
    return [book for book, price, cats in book_data
            if (price <= max_price and all (cat in cats for cat in cats_f))]

很抱歉,这可能是我的措辞。PrintUnou books25,hf应该返回成本小于或等于25的恐怖书和幻想书,因此它应该返回:[“it]”。但是,该函数返回的是所有小于25的恐怖书和幻想书,因此过滤器似乎无法正常工作。