128

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])
                              ^

しかし、が配置されている場所では無効な構文エラーが発生します^。このランバ関数の何が問題になっていますか?

4

5 に答える 5

229

順番を間違えました。Theifは the の後にある必要があります(三項演算子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]
于 2013-03-18T10:48:08.633 に答える
45

あなた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)

ただし、リスト内包表記は、少なくとも1 つの外側のループで開始する必要があります。

于 2013-03-18T10:47:26.553 に答える
8

リスト内包表記:

[<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 if y not in b else if False for y in a ]

于 2016-09-09T09:49:51.680 に答える
5

これはラムダ関数ではありません。リスト内包表記です。

順序を変更するだけです:

[ y for y in a if y not in b]
于 2013-03-18T10:47:13.357 に答える