Flatten a list/tuple and Call a function with tuples

beginner zyzhu2000 at gmail.com
Wed Jul 25 18:12:18 CEST 2007


On Jul 25, 11:00 am, kyoso... at gmail.com wrote:
> On Jul 25, 10:46 am, beginner <zyzhu2... at gmail.com> 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
>
> As I mentioned, you can access the elements individually using square
> brackets. The following works:
>
> f(g()[0], g()[1], 10)
>
> But it's not clear. Unfortunately, I'm not seeing much else for tuple
> unpacking except the obvious:
>
> a,b=g()
> f(a,b,10)
>
> Mike- Hide quoted text -
>
> - Show quoted text -

Unfortunately f(g()[0], g()[1], 10) is calling g() twice. Sometimes
this is not a good idea.

> a,b=g()
> f(a,b,10)

would work until you want it to be an expression.




More information about the Python-list mailing list