「my_foods」という食品のリストがあります。
ラムダ関数を使用して、リスト「good_foods」のすべての要素がリスト「my_foods」に表示されることを確認し、リスト「bad_foods」の要素が「my_foods」に表示されないことも確認します。
ネストされた for ループと if ステートメントでこれを解決できますが、ラムダがよりエレガントであるかどうかに興味があります。
「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」に「リンゴ」または「ニンジン」のみが含まれている場合でも、以下は 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
助けてくれてありがとう!