ジュリアにif-elseリスト内包表記はありますか


8

私はzipをpythonicの方法で使用しようとしていますが、ジュリアで使用しています。2つのリストがあるとします。

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

私は次のリストの理解を作成したいと思います、

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

それはを返しますc = [0;3;4;5;6]。代わりにsyntax: expected "]"返されます。


3
好奇心から、それはPythonで機能しますか?
StefanKarpinski

1
@StefanKarpinski:いいえ。これをPythonで作成すると、Juliaとまったく同じ理由で失敗しますが、基本的に同じ修正が行われます(ただし、Pythonの3項演算子の構文は異なります)。
user2357112はMonica

Pythonの三項演算子はではx if cond else yなくなcond ? x : yので、正しいPythonはになります[x if x<y else y for (x, y) in zip(a, b)]
user2357112はMonica

回答:


13

条件がジェネレーターの「本体」にあるように、理解を書き換える必要があります。

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

if内包表記で-conditionは(あなたが望む意味を追加することが可能であるかもしれないが)現時点でのフィルタリングのために純粋です。


これは完全に機能します。助けてくれてありがとう。
Marc Walton、

1
三項演算子の代わりに、を使用することもできますifelse。これは、場合によってはより高速になります(そして、ブロードキャストすることもできます!)。
phipsgabler
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.