Ответ 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 итерации и напечатать элементы, которые появляются в обоих итерациях.
>>> 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?
У вас неправильный порядок. 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 else False для y в a]