Понимание списка с помощью оператора if


Я хочу сравнить 2 iterables и распечатать элементы, которые появляются в обоих iterables.

>>> 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 69

4 ответа:

вы неправильно поняли заказ. Элемент 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)

но список понимания должны начните хотя бы один внешний цикл.

Это не лямбда-функция. Это понимание списка.

просто измените порядок:

[ 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 если y не в b еще ложно для y в a]