Cleaning up conditionals

Jussi Piitulainen jussi.piitulainen at helsinki.fi
Sun Jan 1 03:01:14 EST 2017


Steve D'Aprano writes:

> On Sun, 1 Jan 2017 02:58 pm, Deborah Swanson wrote:
>
>>> It's possible to select either l1 or l2 using an expression,
>>> and then subscript that with [v]. However, this does not
>>> usually make for readable code, so I don't recommend it.
>>> 
>>> (l1 if whatever else l2)[v] = new_value
>>> 
>>> ChrisA
>> 
>> I'm not sure I understand what you did here, at least not well enough
>> to try it.
>
>
> The evolution of a Python programmer :-)
>
>
> (1) Step One: the naive code.
>
> if condition:
>     l1[v] = new_value
> else:
>     l2[v] = new_value
>
>
> (2) Step Two: add a temporary variable to avoid repeating the
> assignment
>
> if condition:
>     temp = l1
> else:
>     temp = l2
> temp[v] = new_value
>
>
> (3) Step Three: change the if...else statement to an expression
>
> temp = l1 if condition else l2
> temp[v] = new_value
>
>
> (4) Step Four: no need for the temporary variable
>
> (l1 if condition else l2)[v] = new_value

(l1 if bool(l1[v]) < bool(l2[v]) else
 l2 if bool(l1[v]) > bool(l2[v]) else
 l1)[v] = (l2 if bool(l1[v]) < bool(l2[v]) else
           l1 if bool(l1[v]) > bool(l2[v]) else
           l1)[v]

Merry new year :)


More information about the Python-list mailing list