Tupel teilweise übereinstimmung
Ich habe ein Tupel von Tupeln und Tupel. Ich bin daran interessiert zu wissen, die Elemente des ersten Tupels entsprechen, das zweite Tupel (falls vorhanden), unter Berücksichtigung teilweise übereinstimmungen zu.
Dies ist eine filter-Funktion, um zu demonstrieren, was ich meine.
def f(repo):
pattern = (None, None, '1.3')
for idx, item in enumerate(pattern):
if item != None and item != repo[idx]:
return False
return True
>>> repo = (('framework', 'django', '1.3'), ('cms', 'fein', '1.3'), ('cms', 'django-cms', '2.2'))
>>> filter(f, repo)
(('framework', 'django', '1.3'), ('cms', 'fein', '1.3'))
Filter ist nutzlos in dieser form, weil das Muster kann nicht extern bereitgestellt werden die als argument (ich will die gleiche Funktion zu überprüfen, verschiedene Eingänge). Gibt es eine Möglichkeit dieses Problem zu beheben?
Und, was könnte sein, einen anderen Algorithmus zu umarmen, für eine bessere Lösung für das ursprüngliche problem?
- Verwenden Sie immer die
is
Betreiber bei der überprüfung für dieNone
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einen Verschluss zum binden der Muster in der Funktion:
Habe ich auch einen anderen Ausdruck für den Vergleich der Tupel.
Warum nutzen Sie nicht die integrierte
- filter
:...oder ein list comprehension:
Wenn Sie wollte, wickeln Sie es in eine Funktion:
is
Betreiber bei der überprüfung für dieNone
.Was:
Können Sie den folgenden Ausdruck:
oder verwenden Schließung, wie diese:
dann kann aufgerufen werden wie diese:
is
Betreiber bei der überprüfung für dieNone
.!= None
inis not None
und das Problem mit der RückkehrTrue
zu früh. Jetzt sollte es besser sein.