2つのイテラブルを比較し、両方のイテラブルに表示されるアイテムを印刷します。
>>> a = ('q', 'r')
>>> b = ('q')
# Iterate over a. If y not in b, print y.
# I want to see ['r'] printed.
>>> print([ y if y not in b for y in a])
^
ただし、^
が配置されている無効な構文エラーが表示されます。このランバ機能の何が問題になっていますか?
注文が間違っています。 if
はfor
の後にある必要があります(if-else
三項演算子にある場合を除く)
[y for y in a if y not in b]
ただし、これは機能します。
[y if y not in b else other_value for y in a]
最後にif
を追加します。
[y for y in a if y not in b]
リストの内包表記は、ネストされた完全に指定された対応するものと同じ順序で記述され、基本的に上記のステートメントは次のように変換されます。
outputlist = []
for y in a:
if y not in b:
outputlist.append(y)
代わりにバージョンがこれを実行しようとしました:
outputlist = []
if y not in b:
for y in a:
outputlist.append(y)
ただし、リストの内包must少なくともone外側のループで開始します。
これはラムダ関数ではありません。これはリストの理解です。
順序を変更するだけです:
[ y for y in a if y not in b]
リスト内包表記式:
[<value_when_condition_true> if <condition> else <value_when_condition_false> for value in list_name]
したがって、次のようにすることができます:
[y for y in a if y not in b]
デモンストレーションのみを目的とする場合:[yがbにない場合はy、aがyの場合はfalse]