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 <jhihn@gmxcom <mailto:jh...@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/

_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to