¿Hay una comprensión de la lista if-else en Julia

8

Estoy tratando de usar zip de una manera pitónica, pero en Julia. Dadas dos listas:

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

Me gustaría crear la siguiente lista de comprensión,

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

eso vuelve c = [0;3;4;5;6]. En cambio, me syntax: expected "]"devuelven.

Marc Walton
fuente
3
Por curiosidad, ¿eso funciona en Python?
StefanKarpinski
1
@StefanKarpinski: No. Escribir esto en Python fallaría exactamente por la misma razón que en Julia, con esencialmente la misma solución (aunque la sintaxis del operador ternario de Python es diferente).
user2357112 es compatible con Monica el
El operador ternario de Python es en x if cond else ylugar de cond ? x : y, por lo que sería el Python correcto [x if x<y else y for (x, y) in zip(a, b)].
user2357112 es compatible con Monica el

Respuestas:

13

Debe reescribir su comprensión de tal manera que la condición se encuentre en el "cuerpo" del generador:

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

La ifcondición en las comprensiones es puramente para filtrar en este momento (aunque podría ser posible agregar el significado que desee).

pfitzseb
fuente
Esto funciona perfectamente Gracias por la ayuda.
Marc Walton el
1
En lugar del operador ternario, también puede usarlo ifelse, que a veces puede ser más rápido (¡y puede transmitirlo!).
phipsgabler