Я делаю так, если уж приспичит, но нужно стараться делать выражения проще и читабельнее:
print(*[
str(int(i) ** 2)
for i in input().split(' ')
if int(i) % 2 == 1 and str(int(i) ** 2)[-1] != '9'
])
Для сложных кусков правил несколько:
- не экономьте строки.
- открытые скобки (любые) намекнут питону, что оператор еще не закончился.
- ни к чему лишний раз ставить символ переноса строки, это может привести к ошибкам.
- не экономь на спичках: если кусок алгоритмически сложен, не нужно экономить на промежуточных переменных, это позволит сделать код понятнее. Если уж хочется освободить память пораньше, то можно удалять переменные, но всё должно быть целесообразно.
- если уж нагородил литералов сборки спика или словаря, отформатируй их понятно.