Existe uma compreensão da lista if-else em Julia

8

Eu estou tentando usar o zip de forma pitônica, mas na Julia. Dadas duas listas:

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

Gostaria de criar a seguinte lista de compreensão,

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

isso retorna c = [0;3;4;5;6]. Em vez disso, eu syntax: expected "]"volto.

Marc Walton
fonte
3
Por curiosidade, isso funciona em Python?
StefanKarpinski
1
@StefanKarpinski: Não. Escrever isso em Python falharia exatamente pelo mesmo motivo que em Julia, com essencialmente a mesma correção (embora a sintaxe do operador ternário do Python seja diferente).
user2357112 suporta Monica 4/11/19
O operador ternário do Python é em x if cond else yvez de cond ? x : y, portanto, o Python correto seria [x if x<y else y for (x, y) in zip(a, b)].
User2357112 suporta Monica

Respostas:

13

Você precisa reescrever sua compreensão para que a condição esteja no "corpo" do gerador:

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

A ifcondição -conclusões é puramente para filtragem no momento (embora possa ser possível adicionar o significado desejado).

pfitzseb
fonte
Isso funciona perfeitamente. Obrigado pela ajuda.
Marc Walton
1
Em vez do operador ternário, você também pode usar ifelse, que às vezes pode ser mais rápido (e você pode transmiti-lo!).
phipsgabler