Cleaning up conditionals

Gregory Ewing greg.ewing at canterbury.ac.nz
Sun Jan 1 18:52:12 EST 2017


> On Sat, 31 Dec 2016 14:35:46 -0800, "Deborah Swanson"
> <python at deborahswanson.net> declaimed the following:
> 
>>       if len(l1[v]) == 0 and len(l2[v]) != 0:
>>           l1[v] = l2[v]
>>       elif len(l2[v]) == 0 and len(l1[v]) != 0:
>>           l2[v] = l1[v]
>>       elif l1[v] != l2[v]:
>>           ret += ", " + labels[v] + " diff" if len(ret) > 0 else 
>>           labels[v] + " diff"

There are a couple of things I would probably do
with this:

1. Drop the len() calls and just test the lists directly.

2. Eliminate some redundant indexing operations.

    l1v = l1[v]
    l2v = l2[v]
    if l2v and not l1v:
       l1[v] = l2v
    elif l1v and not l2v:
       l2[v] = l1v
    elif l1v != l2v:
       ret += ", " + labels[v] + " diff" if len(ret) > 0 else
       labels[v] + " diff"

Jussi Piitulainen wrote:
 > (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]
 >

If you're aiming for readability, that's *not* the way
to go! Not every 7-line function needs to be written
on one line. :-)

-- 
Greg


More information about the Python-list mailing list