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.