List comprehension returning subclassed list type?

Steven D'Aprano steve at REMOVE.THIS.cybersource.com.au
Sun Mar 25 04:57:43 EDT 2007


On Sat, 24 Mar 2007 23:43:10 -0700, bullockbefriending bard wrote:

> z_list = [Z(y.var1, y.var2,..) for y in list_of_objects_of_class_Y]
> 
> Of course this just gives me a plain list and no access to the
> methodsof z_list.

List comprehensions give you a list. If you want to convert that list into
the type of z_list, you need to do it yourself. Since ZList sub-classes
from list, probably the easiest way is just:

z_list = ZList([some list comprehension here])


> I could, of course go and write a static method in
> ZList which takes a plain list of Z objects and returns a ZList.

Yes, that would be one such way. Another way is:

z_list.extend([some list comprehension here])

If you are using a recent enough version of Python, you probably don't
even need the list comprehension. Just use a generator expression:

z_list.extend(Z(y.var1, y.var2,..) for y in list_of_objects_of_class_Y)

That's especially useful if the list of objects is huge, because it avoids
creating the list twice: once in the list comp, and once as z_list.



-- 
Steven.




More information about the Python-list mailing list