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