Putting it another way, your example doesn't make sense. How would you parenthesise it to make it clearer? [ (x for x in a if x & 1) else 'even'] You have an "else" without an "if". [ x for x in (a if x & 1 else 'even')] Using x before it has been defined, at least in this line of code. [ (x for x in a) if x & 1 else 'even'] Ditto Other variants may be possible. Whereas Jelle's correct version can be written as [(x if x & 1 else 'even') for x in a] [1, 'even', 3] Rob Cliffe On 05/10/2017 16:44, Jelle Zijlstra wrote:
[x if x & 1 else 'even' for x in a]
An `if` at the end of the comprehension means a condition on whether to include the value.
Also, this question would have been better asked on python-list.
2017-10-05 8:40 GMT-07:00 Jason H
mailto:jhihn@gmx.com>: >>> a = [1,2,3] >>> [ x for x in a if x & 1] [1, 3] >>> [ x for x in a if x & 1 else 'even'] File "<stdin>", line 1 [ x for x in a if x & 1 else 'even'] ^ SyntaxError: invalid syntax
I expected [1, 'even', 3]
I would expect that the if expression would be able to provide alternative values through else.
The work around blows it out to: l = [] for x in a: if x&1: l.append(x) else: l.append('even')
Unless there is a better way? _______________________________________________ Python-ideas mailing list Python-ideas@python.org mailto:Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/ http://python.org/psf/codeofconduct/
http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient Virus-free. www.avg.com http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient
<#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/