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.


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).


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.