Я хочу сравнить 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])
^
Но это дает мне неверную синтаксическую ошибку там, где ^
был помещен. Что не так в этой ламба-функции?
python
if-statement
list-comprehension
OrangeTux
источник
источник
b = ('q')
не создают кортеж. Кортежи с одним элементом нуждаются в явном указании,
, то естьb = ('q',)
tuples
вiterables
.Ответы:
Вы ошиблись в заказе.
if
Должно быть после того , какfor
(если это не находится вif-else
тройном оператора)Однако это сработает:
источник
Ставите
if
в конце:Компоненты списков записываются в том же порядке, что и их вложенные полностью определенные аналоги, по сути, приведенный выше оператор переводится как:
Ваша версия пыталась сделать это вместо этого:
но понимание списка должно начинаться по крайней мере с одного внешнего цикла.
источник
формула понимания списка:
таким образом, вы можете сделать это так:
Только для демонстрации: [y if y not in b else False for y in a]
источник
else
понимание в список, по крайней мере, там, где вы его поместите. Не путайте понимание списка (фильтрацию) с условным выражением (которое должно иметь значение, что делает выражение else обязательным).else
использоваться в понимании списка, как показано в коде.Это не лямбда-функция. Это понимание списка.
Просто измените порядок:
источник
Я исследовал и попробовал вышеупомянутые предложения по пониманию списка для моей ситуации, как описано ниже, но это не сработало. Что я здесь делаю не так?
Это не фильтрация слов.
источник