2010-04-29 5 views
35

Ich habe eine einheitliche Liste von Objekten in Python:Extract Liste der Attribute aus der Liste von Objekten in Python

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

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

Jetzt habe ich eine Liste mit einigen Attribut dieser Klasse extrahiert werden soll (sagen wir mal attr) , um es so eine Funktion zu übergeben (für diese Daten zum Beispiel Plotten)

Was ist die pythonic Art und Weise tun,

attr=[o.attr for o in objsm] 

?

Vielleicht Liste ableiten und ein Verfahren, um es hinzuzufügen, so kann ich einige Idiome wie

objs.getattribute("attr") 

verwenden?

+0

Siehe doppelte http://stackoverflow.com/q/677656/127465, esp. Die Antwort mit operator.attrgetter – ThomasH

Antwort

25

Sie können auch schreiben:

attr=(o.attr for o in objsm) 

diese Weise können Sie einen Generator erhalten, die Speicher spart. Weitere Vorteile finden Sie unter Generator Expressions.

47

attrs = [o.attr for o in objs] war der richtige Code zum Erstellen einer Liste wie die, die Sie beschreiben. Versuchen Sie nicht, dafür list zu unterklassen. Gibt es etwas, das dir an diesem Ausschnitt nicht gefallen hat?

+1

Nur, dass es zu ausführlich ist und ich werde es oft verwenden, so eine Verknüpfung wäre praktisch. numpys strukturierte arrays arr ['colname'] oder recarrays arr.colname, stellen bereits etwas ähnliches zur Verfügung, aber in diesem Fall verwende ich Objekte, die benannte Daten (und einige Funktionen) enthalten. – franjesus

Verwandte Themen