[Tutor] Extending a list within a list comprehension

Victor Bouffier victor at grupocdm.com
Wed Apr 12 07:17:35 CEST 2006


On Tue, 2006-04-11 at 22:17 -0400, Kent Johnson wrote:
> Victor Bouffier wrote:
> 
> > If the second element in each array passed as x is of variable length
> > (that is, it has a different element count than three, in this case),
> > the program needs to extend the list instead. Without list
> > comprehensions, and the added capability to utilize and sized list as a
> > second element, my code ended up looking like the following:
> > 
> > temporal = []
> > for x in elements:
> >     lst = [x[0], description[x[0]]]
> >     lst.extend(x[1])
> >     temporal.append([x[1][1], lst])
> > temporal.sort()
> > temporal.reverse()          # sort descending
> > elements = [ x[1] for x in temporal ]
> > 
> > Is there a way to use list comprehensions to append or extend the array
> > as needed by the second code listing?
> 
> I think you are looking for
> temporal = [ [x[0], description[x[0]]] + x[1] for x in elements ]
> 

Hi Kent,
I try this one and get the following error:

TypeError: list objects are unhashable

I figured it is because of the x[0] element being used as a dict key.
Can you explain further where this error comes from? Are you getting it
too?

> but I would make two steps, one for the sort using just
>    [ (x[0], x) for x in elements ]
> 
You are right. This is cleaner and not a big deal to do in two steps.
However for the issue at hand, it still keeps x as a two element list:

[codigo, [ cant, importe, porc]],

which I would like to have extended:

[codigo, cant, importe, porc]

It is not a big deal. That is why I finally went with the longer version
Alan suggested. Before the sort I get a two element list, the second
element being the list I finally want as output.

> then when you pick the data back out you can format it how you like.
> 

Right. After the sort I just get that second element in another list
comprehension

lines = [ x[1] for x in temp ]

Thanks for your help.
Victor

> 
> Kent
> 
> PS to John: the original solution is using DSU, aka Schwarzian Transform
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
> 



More information about the Tutor mailing list