Ссылочное значение выражения внутри понимания списка в Python?

Если у меня есть понимание списка, как

[mymap.get(x, None) for x in oldlist if mymap.get(x,None)]

Есть ли способ сделать mymap.get(x,None) только один раз здесь?

Я представляю что-то вроде

[y for x in oldlist if mymap.get(x,None) as y]

но в настоящее время это SyntaxError в py 2.x. Я хотел бы иметь возможность ссылаться на результирующие значения либо "выражения" понимания списка, либо из его части "list_if".

Я также пытался

[_ for x in oldlist if mymap.get(x,None)]

но это NameError, Похоже _ будучи только некоторой особенностью переводчика на линиях.

редактировать

Есть ли способ как-то ссылаться на эту временную / анонимную / неназванную переменную, не повторяя список?

2 ответа

Решение
[y for y in (mymap.get(x, None) for x in oldlist) if y]
filter(None, (mymap.get(x, None) for x in oldlist))

или, если вам нравится, эквивалентный код, используя bool вместо

filter(bool, (mymap.get(x, None) for x in oldlist))

И чтобы ответить на ваш вопрос, нет способа сослаться на функцию вывода из предиката.

Другие вопросы по тегам