Подтвердить что ты не робот

Учет списка с помощью оператора if

Я хочу сравнить 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])
                              ^

Но это дает мне недопустимую синтаксическую ошибку, когда был помещен ^. Что не так в этой функции lamba?

4b9b3361

Ответ 1

У вас неправильный порядок. 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]

Ответ 2

Вы положили 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)

но понимание списка должно начинаться, по крайней мере, с одного внешнего цикла.

Ответ 3

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

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

[ y for y in a if y not in b]

Ответ 4

формула понимания списка:

[<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 else False для y в a]