Ich habe eine einheitliche 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 möchte ich eine Liste mit einem Attribut dieser Klasse extrahieren (sagen wir attr), um ihr eine Funktion zu übergeben (zum Beispiel zum Zeichnen dieser Daten).
Was ist die pythonische Art, es zu tun,
attr=[o.attr for o in objsm]
?
Leiten Sie vielleicht eine Liste ab und fügen Sie eine Methode hinzu, damit ich eine Redewendung wie verwenden kann
objs.getattribute("attr")
?
Antworten:
Sie können auch schreiben:
attr=(o.attr for o in objsm)
Auf diese Weise erhalten Sie einen Generator, der Speicher spart. Weitere Vorteile finden Sie unter Generator-Ausdrücke .
quelle
attrs = [o.attr for o in objs]
war der richtige Code, um eine Liste wie die von Ihnen beschriebene zu erstellen. Versuchen Sie nicht, dafür eine Unterklasselist
zu bilden. Gibt es etwas, das dir an diesem Ausschnitt nicht gefallen hat?quelle
getOattr= lambda l,a: [getattr(i,a) for i in l]
damit dugetOattr(l,'id')
oder kannstgetOattr(l,'name')
. Wenn Sie genauere benötigen,getIds= lambda l,a: [i.id for i in l]
damit Sie könnengetIds(l)