Gibt es ein Wenn-sonst-Listenverständnis in Julia?

8

Ich versuche, zip auf pythonische Weise zu verwenden, aber in Julia. Gegeben zwei Listen:

a =[2;3;4;5;6]
b =[0;7;8;9;10]

Ich möchte das folgende Listenverständnis erstellen:

c = [x for (x,y) in zip(a, b) if (x<y) else y]

das kehrt zurück c = [0;3;4;5;6]. Stattdessen werde ich syntax: expected "]"zurückgegeben.

Marc Walton
quelle
3
Funktioniert das aus Neugier in Python?
StefanKarpinski
1
@StefanKarpinski: Nein. Das Schreiben in Python würde aus genau demselben Grund wie in Julia mit im Wesentlichen demselben Fix fehlschlagen (obwohl die ternäre Operatorsyntax von Python unterschiedlich ist).
user2357112 unterstützt Monica
Der ternäre Operator x if cond else yvon Python ist anstelle von cond ? x : y, also wäre der richtige Python [x if x<y else y for (x, y) in zip(a, b)].
user2357112 unterstützt Monica

Antworten:

13

Sie müssen Ihr Verständnis so umschreiben, dass sich der Zustand im "Körper" des Generators befindet:

c = [x < y ? x : y for (x, y) in zip(a, b)]

Die ifBedingung im Verständnis dient derzeit nur zum Filtern (obwohl es möglicherweise möglich ist, die gewünschte Bedeutung hinzuzufügen).

pfitzseb
quelle
Das funktioniert perfekt. Danke für die Hilfe.
Marc Walton
1
Anstelle des ternären Operators können Sie auch verwenden ifelse, was manchmal schneller sein kann (und Sie können es senden!).
Phipsgabler