Hi,

   I keep working around a little problem with unpacking in cases in which I 
don't know how many elements I get. Consider this:

      def  tabulate_lists (*arbitray_number_of_lists):
            table = zip (arbitray_number_of_lists)
            for record in table:
               # etc ...

This does not work, because the zip function also has an *arg parameter, which 
expects an arbitrary length enumeration of arguments
which it would turn into a tuple (lists in this case). Now my function does 
exactly the same thing ahead of zip. So, before I pass
the tuple "arbitrary_number_of_lists" to zip, I 'd need to unpack it but the 
only way I know of is into variables:

         list1, list2, list3 = arbitrary_number_of_lists
         zip (list1, list2, list3)

With arbitrary number of lists it cannot be done this way.

Question: Is there an unpacking mechanism for cases in which I don't know--and 
don't need to know--how many elements I get, or an
argument passing mechanism that is the inverse of the tuplifier (*args)?

         table = zip (&arbitrary_number_of_lists)     # I invent '&' to 
illustrate

I preclude passing a pre-zipped table as a solution, because all 
function-related argument processing should be done by the
function, not by the caller. Supposing my tabulator should auto-format a 
printout. It would need to analyze each column (e.g.
maxima, minima, max length of strings, etc.) That would be a lot simpler with 
column lists than with record lists, unless I undo
what the caller had to do, because the function couldn't ... a lot of in and 
out ...

Of course I could code a code edit and exec () it.

      names_of_lists = ','.join (['list%d' % n for n in range (len 
(arbitrary_number_of_lists)])
      exec ('"%s = arbitrary_number_of_lists"'% names_of_lists)
      exec ('"table = zip (%s)"' % names_of_lists)

That should work, but it looks loathsome to me.


Has anyone come across a similar problem and found an elegant solution he might 
want to share?

Frederic


-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to