2017-06-15 3 views
3

Ich habe nicht in der Lage, den Trick zu finden, um eine Fortsetzung zu tun, wenn ein in, für irgendwelche Ideen ?. Bitte geben Sie keine expliziten Loops als Lösung an, es sollte alles in einem Liner sein.Weiter, wenn sonst in Inline für Python

testete ich den Code mit weiter, übergeben und nur wenn ...

list_num=[1,3] 
[("Hola" if i == 1 else continue) for i in list_num] 

Ausgabe meiner Studien:

[("Hola" if i == 1 else continue) for i in list_num] 
            ^
SyntaxError: invalid syntax 


File "<stdin>", line 1 
    [("Hola" if i == 1 else pass) for i in list_num] 
           ^
SyntaxError: invalid syntax 



File "<stdin>", line 1 
    [(if i == 1: "Hola") for i in list_num] 
^
SyntaxError: invalid syntax 
+0

Sie Rückkehr ‚continue‘ als Ergebnis einer ternären Operation . A wenn B else C ein ternärer Operator ist, wertet er B aus und gibt A zurück, wenn wahr, C wenn nicht. –

+0

Sie können keine * Anweisungen * in bedingten * Ausdrücken * verwenden. – vaultah

Antwort

5

Sie jedes Element in der Liste ersetzen:

>>> ['hola' if i == 1 else '' for i in list_num] 
['hola', ''] 

Oder ersetzen, wenn eine Bedingung erfüllt ist:

>>> ['hola' for i in list_num if i == 1] 
['hola'] 
+1

Auch als Ersatz möchte ich diese Alternative anbieten: '[" hola "* (i == 1) für i in list_num]' – Peri461

+0

Super! Danke für deine Antwort, die zweite ist genau das, was ich wollte. – chuseuiti

1

Wenn Sie einen Wächter zu einer Liste Verständnis Aussage hinzufügen möchten, geht es am Ende. Da es auch eine Wache gibt es keine else Klausel:

list_num=[1,3] 
["Hola" for i in list_num if i == 1] 
0

Sie sollten Filterfunktion in der Liste Verständnis verwenden. Betrachten Sie das folgende Beispiel:

['Hola' for i in list_num if i == 1] 
2

Es ist wichtig, sich daran zu erinnern, dass der ternäre Operator noch ein Operator ist, und somit muss ein Ausdruck zurückzukehren. Es macht also Sinn, dass Sie keine Anweisungen wie continue oder pass verwenden können. Sie sind keine Ausdrücke.

Allerdings ist die Verwendung einer Aussage in Ihrem Listenverständnis sowieso völlig unnötig. Tatsächlich brauchen Sie nicht einmal den ternären Operator. Filtern von Elementen aus einer Liste ist ein gemeinsames Idiom, so Python spezielle Syntax bietet so zu tun, indem Sie einzelne if Anweisungen in einem Verständnis verwenden:

>>> list_num = [1, 3] 
>>> ["Hola" for i in list_num if i == 1] 
['Hola'] 
>>>