Flatten a list/tuple and Call a function with tuples

James Stroud jstroud at mbi.ucla.edu
Wed Jul 25 18:49:22 CEST 2007


beginner wrote:
> On Jul 25, 10:19 am, Stargaming <stargam... at gmail.com> wrote:
>> On Wed, 25 Jul 2007 14:50:18 +0000, beginner wrote:
>>> Hi,
>>> I am wondering how do I 'flatten' a list or a tuple? For example, I'd
>>> like to transform[1, 2, (3,4)] or [1,2,[3,4]] to  [1,2,3,4].
>> A recursive function, always yielding the first element of the list,
>> could do the job. See the ASPN Python Cookbook for a few implementations.http://aspn.activestate.com/ASPN/search?
>> query=flatten&section=PYTHONCKBK&type=Subsection
>>
>>> Another question is how do I pass a tuple or list of all the aurgements
>>> of a function to the function. For example, I have all the arguments of
>>> a function in a tuple a=(1,2,3). Then I want to pass each item in the
>>> tuple to a function f so that I make a function call f(1,2,3). In perl
>>> it is a given, but in python, I haven't figured out a way to do it.
>>> (Maybe apply? but it is deprecated?)
>>>>> def foo(a, b, c): print a, b, c
>> ...
>>>>> t = (1, 2, 3)
>>>>> foo(*t)
>> 1 2 3
>>
>> Have a look at the official tutorial, 4.7.4http://www.python.org/doc/
>> current/tut/node6.html#SECTION006740000000000000000
>>
>>> Thanks,
>>> cg
>> HTH,
>> Stargaming
> 
> Hi Stargaming,
> 
> I know the * operator. However, a 'partial unpack' does not seem to
> work.
> 
> def g():
>   return (1,2)
> 
> def f(a,b,c):
>   return a+b+c
> 
> f(*g(),10) will return an error.
> 
> Do you know how to get that to work?
> 
> Thanks,
> cg
> 
> 

Were this not hypothetical, I would make use of the commutative property 
of addition:

f(10, *g())

Proof:

    1+2+10 = 10+1+2


Also, this has not been suggested:

py> def g():
...   return (1,2)
...
py> def f(a,b,c):
...   return a+b+c
...
py> f(c=10, *g())
13


James



More information about the Python-list mailing list