2010-04-29 28 views
35

Mam jednolitego listę obiektów w python:lista Wyciąg z atrybutów z listy obiektów w Pythonie

class myClass(object): 
    def __init__(self, attr): 
     self.attr = attr 
     self.other = None 

objs = [myClass (i) for i in range(10)] 

Teraz chcę wyodrębnić listę z jakiegoś atrybutu tej klasy (powiedzmy attr) w celu przekazania go więc niektóre funkcje (na wykreślenie tych danych na przykład)

Jaki jest pythonic sposób to zrobić,

attr=[o.attr for o in objsm] 

?

Może czerpać listę i dodać metodę do niego, więc mogę użyć jakiegoś idiomu jak

objs.getattribute("attr") 

?

+0

Zobacz duplikat http://stackoverflow.com/q/677656/127465, esp. Odpowiedź z operator.attrgetter – ThomasH

Odpowiedz

25

Można również napisać:

attr=(o.attr for o in objsm) 

ten sposób można uzyskać generator, który oszczędza pamięć. Aby uzyskać więcej korzyści, spójrz na Generator Expressions.

47

attrs = [o.attr for o in objs] to poprawny kod do tworzenia listy takiej, jak opisana. Nie próbuj do tego podklasy list. Czy jest coś, co ci się nie podoba w tym fragmencie?

+1

Tylko, że jest zbyt szczegółowy i zamierzam go często używać, więc skrót będzie przydatny. uporządkowane tablice numpy arr ['colname'] lub recarrays arr.colname, już zapewniają coś podobnego, ale w tym przypadku używam obiektów, które przechowują nazwane dane (i niektóre funkcje). – franjesus

Powiązane problemy