Sagen wir brauchen ein Programm, das eine Liste von Zeichenfolgen und spaltet sie, und hängt die ersten beiden Wörter, in einem Tupel, an eine Liste und gibt diese Liste zurück; Mit anderen Worten, ein Programm, das Ihnen die ersten zwei Wörter jeder Zeichenfolge gibt.Vermeiden redundante Funktionsaufrufe in Comprehensions aus dem Verständnis
input: ["hello world how are you", "foo bar baz"]
output: [("hello", "world"), ("foo", "bar")]
Es kann wie so geschrieben werden (wir gültige Eingabe übernehmen):
def firstTwoWords(strings):
result = []
for s in strings:
splt = s.split()
result.append((splt[0], splt[1]))
return result
Aber eine Liste Verständnis wäre viel schöner.
def firstTwoWords(strings):
return [(s.split()[0], s.split()[1]) for s in strings]
Aber dies beinhaltet zwei Aufrufe an split()
. Gibt es eine Möglichkeit, die Aufteilung nur einmal innerhalb des Verständnisses durchzuführen? Ich habe versucht, was kam, natürlich, und es war eine ungültige Syntax:
>>> [(splt[0],splt[1]) for s in strings with s.split() as splt]
File "<stdin>", line 1
[(splt[0],splt[1]) for s in strings with s.split() as splt]
^
SyntaxError: invalid syntax
Wenn Sie verwenden 'with' wollen, sollte das Objekt erhalten Methoden' __enter__' und '__exit__'. Liste kann hier nicht verwendet werden. – zhangyangyu
'Eingang' ist ein eingebauter, wahrscheinlich nicht die beste Idee, um es als Variable zu verwenden –
@gnibbler Es war keine Variable - ich benutzte den Code-Block nur, um es zu formatieren. Ich sollte den Operator '=' aber wahrscheinlich nicht verwenden. – 2rs2ts