我有一份名为“my_foods”的食物清单。
我想使用 lambda 函数来验证列表“good_foods”中的所有元素是否出现在列表“my_foods”中,并验证列表“bad_foods”中的所有元素都没有出现在“my_foods”中。
我可以用嵌套的 for 循环和 if 语句来解决这个问题,但我很好奇 lambdas 是否更优雅。
如果“my_foods”同时具有“apple”和“carrot”,则以下成功执行:
good_foods = ['apple', 'carrot']
junk_foods = ['soda', 'burger']
my_foods = ['banana', 'carrot', 'bread', 'apple']
result = ( filter(lambda x: x in my_foods, good_foods) and
not filter(lambda x: x in my_foods, junk_foods) )
print result
# True
但是,如果“my_foods”只有“apple”或只有“carrot”,那么下面仍然返回 True,我不希望这样。我希望它返回 False。我想验证所有“good_foods”都在“my_foods”列表中:
good_foods = ['apple', 'carrot']
junk_foods = ['soda', 'burger']
my_foods = ['banana', 'carrot', 'bread']
result = ( filter(lambda x: x in my_foods, good_foods) and
not filter(lambda x: x in my_foods, junk_foods) )
print result
# True
另外,如果“my_foods”既没有“apple”也没有“carrot”,那么下面会返回一个空列表。我希望它返回 False 代替:
good_foods = ['apple', 'carrot']
junk_foods = ['soda', 'burger']
my_foods = ['banana', 'bread']
result = ( filter(lambda x: x in my_foods, good_foods) and
not filter(lambda x: x in my_foods, junk_foods) )
print result
# []
最后,如果任何“bad_foods”在“my_foods”列表中,则以下成功执行并返回 False,这就是我在这种情况下想要的:
good_foods = ['apple', 'carrot']
junk_foods = ['soda', 'burger']
my_foods = ['banana', 'carrot', 'bread', 'apple', 'soda']
result = ( filter(lambda x: x in my_foods, good_foods) and
not filter(lambda x: x in my_foods, junk_foods) )
print result
# False
谢谢你的帮助!