Tuples part 2

George Sakkis george.sakkis at gmail.com
Thu Jun 5 19:22:44 CEST 2008


On Jun 5, 11:48 am, Ivan Illarionov <ivan.illario... at gmail.com> wrote:
> On 5 июн, 19:38, George Sakkis <george.sak... at gmail.com> wrote:
>
>
>
> > On Jun 5, 11:21 am, Ivan Illarionov <ivan.illario... at gmail.com> wrote:
>
> > > On 5 июн, 18:56, Ivan Illarionov <ivan.illario... at gmail.com> wrote:
>
> > > > On 5 июн, 18:19, "victor.hera... at gmail.com" <victor.hera... at gmail.com>
> > > > wrote:
>
> > > > > On Jun 5, 3:49 pm, Ivan Illarionov <ivan.illario... at gmail.com> wrote:
>
> > > > > > On 5 ÉÀÎ, 01:57, "victor.hera... at gmail.com" <victor.hera... at gmail.com>
> > > > > > wrote:
>
> > > > > > > Hi Everyone,
>
> > > > > > > i have another question. What if i wanted to make n tuples, each with
> > > > > > > a list of coordinates. For example :
>
> > > > > > > coords = list()
> > > > > > > for h in xrange(1,11,1):
> > > > > > >    for i in xrange(1, 5, 1) :
> > > > > > >       for j in xrange(1, 5, 1) :
> > > > > > >          for k in xrange(1,2,1) :
> > > > > > >             coords.append((i,j,k))
> > > > > > >             lista+str(h)= tuple coords
> > > > > > > print tuple(coords)
>
> > > > > > > so that i will have tuple1, tuple2,..., tupleN, etc. I am trying to do
> > > > > > > it the way i show you above but it is not working properly. I wish you
> > > > > > > could help me with that. Thanks again,
> > > > > > >>> from itertools import repeat, izip
> > > > > > >>> coords = tuple((i,j,k) for i in xrange(1,5) for j in xrange(1,5) for k in xrange(1,2))
> > > > > > >>> locals().update(("tuple%s" % i, coord) for i, coord  in izip(xrange(1,11), repeat(coords)))
> > > > > > >>> tuple1
>
> > > > > > ((1, 1, 1), (1, 2, 1), (1, 3, 1), (1, 4, 1), (2, 1, 1), (2, 2, 1), (2,
> > > > > > 3, 1), (2
> > > > > > , 4, 1), (3, 1, 1), (3, 2, 1), (3, 3, 1), (3, 4, 1), (4, 1, 1), (4, 2,
> > > > > > 1), (4, 3
> > > > > > , 1), (4, 4, 1))
>
> > > > > > Does this help?
>
> > > > > > But I don't understand why you need this?
>
> > > > > > Ivan
>
> > > > > Hi,
>
> > > > > What i need is, for example:
>
> > > > > tuple 1=((1, 1, 1), (1, 2, 1), (1, 3, 1), (1, 4, 1))
>
> > > > > tuple 2=((2, 1, 1), (2, 2, 1), (2, 3, 1), (2, 4, 1))
>
> > > > > tuple 3=((3, 1, 1), (3, 2, 1), (3, 3, 1), (3, 4, 1))
>
> > > > > and so on. Please help me and sorry for not taking the time to post my
> > > > > questions properly.
>
> > > > > Victor
>
> > > > Or even so:
>
> > > > locals().update(("tuple_%s" % i, tuple((i,j,k) for j in range(1,5) for
> > > > k in range(1,2))) for i in range(1,5))
>
> > > > Ivan
>
> > > Tried to make it readable:
>
> > > def iter_coords(i):
> > >     for j in xrange(1,5):
> > >         for k in xrange(1,2):
> > >             yield i, j, k
>
> > > def iter_vars():
> > >     for i in xrange(1, 5):
> > >         yield "tuple_%s" % i, tuple(iter_coords(i))
>
> > > locals().update(dict(iter_vars()))
>
> > locals().update() works by accident here because it's in global scope;
> > it doesn't work within a function.
>
> > Use a proper data structure, like a dict or a list, and access each
> > tuple list as 'tuples[n]' instead of 'tuple_n'.
>
> > George
>
> OP wanted variables and I showed him how to do this. I agree that a
> list or a dict would be better.
>
> Ivan

Generating variable names at runtime doesn't work for locals and it is
a bad solution for globals in 99.9% of the cases. It is usually more
helpful to point someone who can't even express his problem clearly to
the right direction, rather than taking his pseudocode literally and
coming up with a semi-working translation.

George



More information about the Python-list mailing list