list unpack trick?

Fredrik Lundh fredrik at pythonware.com
Sat Jan 22 02:34:27 EST 2005


"aurora" wrote:

> The only issue is when s does not contain the character '=', let's say it  is 'xyz', the result 
> list has a len of 1 and the unpacking would fail. Is  there some really handy trick to pack the 
> result list into len of 2 so  that it unpack as name='xyz' and value=''?

do you need a trick?  spelling it out works just fine:

    try:
        key, value = field.split("=", 1)
    except:
        key = field; value = ""

or

    if "=" in field:
        key, value = field.split("=", 1)
    else:
        key = field; value = ""

(the former might be slightly more efficient if the "="-less case is uncommon)

or, if you insist:

    key, value = re.match("([^=]*)(?:=(.*))?", field).groups()

or

    key, value = (field + "="["=" in field:]).split("=", 1)

but that's not really worth the typing. better do

    key, value = splitfield(field)

with a reasonable definition of splitfield (I recommend the try-except form).

> So more generally, is there an easy way to pad a list into length of n  with filler items appended 
> at the end?

some variants (with varying semantics):

    list = (list + n*[item])[:n]

or

    list += (n - len(list)) * [item]

or (readable):

    if len(list) < n:
        list.extend((n - len(list)) * [item])

etc.

</F> 






More information about the Python-list mailing list