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


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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.