/ / Condensing ein If-Anweisung - Python, Liste, Operator-Schlüsselwort

Condensing ein If-Anweisung - Python, Liste, Operator-Schlüsselwort

Ich habe folgende Listen:

languages =["java", "haskell", "Go", "Python"]
animals = ["pigeon", "python", "shark"]
names = ["Johan","Frank", "Sarah"]

Ich möchte herausfinden, ob Python in allen drei der folgenden Listen vorhanden ist. Die folgende if-Anweisung ist, was ich gerade mit der "in" -Methode und "und" Operatoren kam.

if("Python" in languages and "Python" in animals and "Python" in names )

Gibt es eine Möglichkeit, diese Aussage in eine kleinere Länge zu verdichten?
I.E.

if("Python" in languages and in animals and in names)

Antworten:

6 für die Antwort № 1

Sie können vermeiden, zu wiederholen "Python":

if all("Python" in L for L in [languages, animals, names]):

Aber das ist nicht viel kürzer.


5 für die Antwort № 2

Wenn dies ein Test ist, den Sie wiederholt durchführen möchten, wäre es effizienter, die Schnittmenge Ihrer Listen vorab zu berechnen:

lanimes = set(languages) & set(animals) & set(names)

if "Python" in lanimes:

(Das in Operator ist O (n) für eine Liste, O (1) für eine Menge.)


4 für die Antwort № 3

Erwägen:

if all("Python" in x for x in (languages, animals, names)):

2 für die Antwort № 4

Ich glaube nicht, dass Python genau so einen Syntax-Zucker hat, aber je nachdem, wie viele Listen man hat, könnte man so etwas machen

if all("Python" in x for x in [languages, animals, names])

Für sich genommen ist es wahrscheinlich ein wenig ausführlicher als Ihr ands, aber wenn Sie eine große Anzahl von Listen haben, oder Sie haben bereits eine Liste von Listen, dann sollte es etwas Speicherplatz sparen, und IMHO ist es mehr klar, was das Ziel der if-Anweisung ist.


2 für die Antwort № 5

Wenn Sie Python 3 verwenden, können Sie verwenden erweitertes iteratives Entpacken:

if "Python" in (*languages, *animals, *names):


0 für die Antwort № 6

Kurze Antwort: Nein, die Sprachsyntax lässt dies nicht zu.

Wenn du Ja wirklich Sie wollen weniger kopieren "Python", Sie könnten so etwas in Ihrer if-Bedingung verwenden:

all("Python" in p for p in (languages, animal, names))

Ich schlage auch vor, dass Sie vielleicht das Design neu bewerten könnten, um Ihren Code flexibler zu machen. Verständnis und Generatorausdrücke sind ein guter Anfang.