[Tutor] If/elif/else when a list is empty

Steven D'Aprano steve at pearwood.info
Tue Sep 14 14:45:31 CEST 2010


On Tue, 14 Sep 2010 01:58:07 pm aeneas24 at priest.com wrote:

> if len(rgenre)>0:
>           if len(rgenre)>2:
>               rg1=rgenre[0]
>               rg2=rgenre[1]
>               rg3=rgenre[2]
>           elif len(rgenre)==2:
>               rg1=rgenre[0]
>               rg2=rgenre[1]
>               rg3="NA"
>           elif len(rgenre)==1:
>               rg1=rgenre[0]
>               rg2="NA"
>               rg3="NA"
>    else len(rgenre)<1: # I was hoping this would take care of the
> "there is no genre information" scenario but it doesn't
> rg1=rg2=rg3="NA"

The above will give a SyntaxError, because you can't have a condition 
immediately after an else.

This is a neater way to write the above:

n = len(rgenre)
if n == 0:
    rg1 = rg2 = rg3 = "NA"
elif n == 1:
    rg1 = rgenre[0]
    rg2 = rg3 = "NA"
elif n == 2:
    rg1, rg2 = rgenre[0:2]
    rg3 = "NA"
else:
    rg1, rg2, rg3 = rgenre[:3]

which in turn can be shortened to the slightly cryptic one-liner:

rg1, rg2, rg3 = (rgenre + ["NA"]*3)[:3]

as already discussed earlier.




-- 
Steven D'Aprano


More information about the Tutor mailing list