Supponiamo di aver bisogno di un programma che prende un elenco di stringhe e le divide e aggiunge le prime due parole, in una tupla, a un elenco e restituisce tale elenco; in altre parole, un programma che ti dà le prime due parole di ogni stringa.Eliminazione di chiamate di funzioni ridondanti in comprensione dall'interno della comprensione
input: ["hello world how are you", "foo bar baz"]
output: [("hello", "world"), ("foo", "bar")]
Può essere scritto in questo modo (si suppone di ingresso valido):
def firstTwoWords(strings):
result = []
for s in strings:
splt = s.split()
result.append((splt[0], splt[1]))
return result
Ma una lista di comprensione sarebbe molto più bello.
def firstTwoWords(strings):
return [(s.split()[0], s.split()[1]) for s in strings]
Ma questo comporta due chiamate a split()
. C'è un modo per eseguire la divisione solo una volta all'interno della comprensione? Ho provato quello che è venuto naturale ed è stato sintassi non valida:
>>> [(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
Se si desidera utilizzare 'with', l'oggetto dovrebbe ottenere metodi' '__enter__' e __exit__'. elenco non può essere utilizzato qui. – zhangyangyu
'input' è un builtin, probabilmente non è la migliore idea per usarlo come variabile –
@gnibbler Non era una variabile - Ho usato il blocco di codice solo per dargli la formattazione. Probabilmente non dovrei usare l'operatore '='. – 2rs2ts