2016-05-04 14 views
1

Hallo all dies könnte wie eine nutzlose Frage scheinen, da ich einen Weg gefunden habe, aber ich würde gerne wissen, ob es einen schnelleren Weg zu bekommen gibt die Anzahl der Elemente einer Liste, die eine bestimmte Klasse verifizieren.Holen Sie, wie viele (wenn überhaupt) Objekte einer Klasse in einer Liste enthalten sind

Bisher ich tue:

items_from_class = 0 
for x in Mylist: 
    if isinstance(x, Myclass): 
     items_from_class += 1 
if items_from_class > 2; 
    do something ... 

Ich möchte etwas, das in eine Zeile passt, wie:

if isinstance(x,Myclass) in Mylist > 2: 
    do something ... 

Vielen Dank für Ihre Hilfe!

+0

Ja, brechen, wenn Sie feststellen, three.there keinen Sinn mehr zu überprüfen, ob alles, was Sie wollen wissen, ist, wenn es drei oder mehr –

+0

Ja, im Moment, dass alles, was ich brauche ist, aber ich war die Frage zu stellen für allgemeinere Zwecke, da ich andere Anwendungen dafür haben werde. – Sorade

Antwort

2

Überraschend, dass Menschen Listen oder Lambdas ohne Grund erstellen möchten.

if sum(1 for x in items if isinstance(x, MyClass)) > 2: 
    ## do stuff 
-1

Sie können Sie den folgenden Code für Ihre Anforderung

myClassElements = [ x for x in itemList if isinstance(x,MyClass) ] 
if len(myClassElements) > 2: 
    ...do something 

Hoffnung, dass Ihre Frage beantwortet

+0

Das Down-Vote ist, weil es ineffizient ist, oder? Der Grund, warum ich das geschrieben habe, war, dass der Interpreter die Optimierung durchführen kann und der Code lesbarer ist. Auch der Code ist in einer Zeile wie die Anforderung. –

+0

Was meinst du mit ineffizient? Wäre es besser, wenn ich meine Formulierung mit einer "Pause" halte, wie sie von @Padraic Cunningham vorgeschlagen wurde? Ich entwickle ein 2D-Spiel in Pygame, also denke ich, es sollte in Ordnung sein, deinen Vorschlag zu verwenden, da das Spiel insgesamt nicht sehr anspruchsvoll sein wird. – Sorade

+0

(meine) downvote ist, weil es nur sloppy code ist - Erstellen einer ganzen Liste, nur um die Länge der Liste zu nehmen, wenn Sie die Liste nicht noch einmal verwenden werden. Sicher, es funktioniert, aber auch die Original Post; Der Punkt ist, * besseren * Code zu schreiben, und das schließt mehr Pythonic ein. – dwanderson

0

Ist das, was Sie suchen?

if sum(map(lambda x: isinstance(x, MyClass), MyList)) > 2: 
    ...do stuff 
Verwandte Themen