如何仅用Jinja2内置过滤器判断list1元素全在list2中?
问题描述
给定两个列表:
list1 = ['playing', 'off', 'off', 'off'] list2 = ['off', 'idle', 'paused']
要求仅借助Jinja2内置过滤器编写单行测试逻辑,返回True或False:当list1的所有元素都能在list2中匹配到时返回True,只要list1中有至少一个元素无法在list2中匹配到就返回False。
示例说明:
# 示例 1: list1 = ['playing', 'off', 'off', 'off'] list2 = ['off', 'idle', 'paused'] result = False # 示例 2: list1 = ['playing', 'off', 'playing', 'off'] list2 = ['off', 'idle', 'paused'] result = False # 示例 3: list1 = ['idle', 'off', 'paused', 'off'] list2 = ['off', 'idle', 'paused'] result = True
解决方案
可以通过Jinja2内置的map和all过滤器组合实现需求,单行代码如下:
{{ list1 | map('in', list2) | all }}
逻辑解释
map过滤器:传入'in'测试和list2作为参数,遍历list1的每一个元素,判断当前元素是否存在于list2中,最终生成一个由布尔值组成的迭代器。all过滤器:检查上述迭代器里的所有值是否全为True,如果是则返回True,否则返回False。
内容的提问来源于stack exchange,提问作者t.abraham
相关产品推荐
相关产品推荐

