Überprüfen Sie, ob sich ein Element in einer verschachtelten Liste befindet

8

in einer einfachen Liste nach der Überprüfung ist trivial:

%Vor%

aber wenn es eine Liste von Listen ist, wie zum Beispiel:

%Vor%

Wie kann dies behoben werden, um True ?

zurückzugeben?     
Al_Iskander 09.11.2016, 19:01
quelle

7 Antworten

9

Versuchen Sie es mit der integrierten Funktion any . Es ist die idiomatische Lösung, und es ist auch effizient, weil any kurzschließt und stoppt, sobald es die erste Übereinstimmung findet:

%Vor%     
Óscar López 09.11.2016, 19:02
quelle
7

Hier ist eine rekursive Version, die für jede Verschachtelungsebene funktioniert.

%Vor%

Hier ein paar Tests:

%Vor%     
Curt F. 09.11.2016 19:20
quelle
4

Sie können set.issubset() und itertools.chain() verwenden:

%Vor%

Sie können die Mitgliedschaft auch für mehrere Artikel effizient prüfen:

%Vor%     
Kasramvd 09.11.2016 19:10
quelle
2

Das würde funktionieren:

%Vor%

Ich würde Oscars Antwort empfehlen, da any hier die richtige Option ist.

    
KVISH 09.11.2016 19:03
quelle
1

TL; DR

%Vor%

Beachte das etwas interessant:

%Vor%

Ist über 50% langsamer auszuführen.

Ursprüngliche Antwort (en)

Was ist, wenn Sie eine Tiefe von mehr als 2 haben? Hier ist ein Ansatz für den generischen Fall:

%Vor%

Ich bin mir nicht sicher über die Geschwindigkeit, aber wie gesagt, es ist ein Ansatz, der für jemanden nützlich sein kann!

BEARBEITEN - BESSERE (SCHNELLER) ANTWORT:

Dies reduziert die benötigte Zeit (wenn n gefunden wird, sogar wenn es nicht gefunden wird, ungefähr die Hälfte der Zeit tatsächlich ...), indem es früh zurückkehrt. Dies ist etwas schneller als die Antwort von @Curt F. und langsamer als das Erstellen einer Funktion, die eine maximale Tiefe von 2 annimmt (die akzeptierte Antwort).

%Vor%

Schnelles Timing (sehr hacky, sorry, beschäftigt heute!):

%Vor%     
Eugene 09.11.2016 19:28
quelle
0

probiere

aus %Vor%     
Afsal Salim 16.11.2016 08:04
quelle
0

Mein Code basiert auf Óscar López 'Lösung. Seine Lösung war nicht genau das, was ich für mein Problem brauchte, aber es gab genug Informationen für mich, um mein Problem herauszufinden. Wenn Sie Elemente in einer Liste verschachtelt haben und sehen müssen, ob sie sich in einer anderen verschachtelten Liste befinden, funktioniert das.

%Vor%     
Michael Swartz 11.03.2018 02:45
quelle

Tags und Links