【Python + JavaScript】"[要素, 要素][真偽値]"で三項演算子っぽいもの
はじめに
At Coderを利用中に回答を閲覧していて気になるPythonコードがあったので調べてみた。
不思議な構文
気になる見つけたAtCorderのPythonの値を変えてコードを以下に記入した。
print(["No","Yes"]["1" in ["1", "2", "3", "4", "5", "6"]])
これの出力はYesになるん。な〜ぜ?
解説
"1" in ["1", "2", "3", "4", "5", "6"]
このコードは、文字列の1が1〜6の文字列を格納している配列の中に存在しているかをtrue or falseで返すコードである。今回の場合だと true になる。つまり["No","Yes"][true]
になる。そして、Pythonは、falseやtrueを真偽値が0か1と解釈することもできるため、["No","Yes"][1]
となる。これで、添字として配列["No","Yes"]
から値を取り出せるみたい。すごいね。
JavaScript
Pythonで上記コードを調査していて、JavaScriptでも試せるのかと思ったので、実際にやってみた。下記コードでいけるのか試す?
console.log(["No","Yes"][["1", "2", "3", "4", "5", "6"].includes("1")]); undefined
だめだった。trueかfalseで帰ってくるから、includes
はできないみたい。
console.log(["No","Yes"][["1", "2", "3", "4", "5", "6"].some(x => x === "2")]) undefined
なので、some
も撃沈。0か1を返しくれるようなの思い出せないので、JavaScriptは無理かな。
探してみた
bool to 0 or 1 みたいに検索するとできそうだった!
console.log(["No","Yes"][+ ["1", "2", "3", "4", "5", "6"].includes("1")]) Yes
console.log(["No","Yes"][["1", "2", "3", "4", "5", "6"].includes("1") | 0]) Yes
やったぜ!これでJavaScriptもそれっぽいのが利用できるようになった。まあ、使う機会があればいいけど。
そもそも
JavaScriptなら普通に三項演算子を使えばという。
console.log(["1", "2", "3", "4", "5", "6"].includes("1") ? "Yes" : "no") Yes
参考文献
- pythonの三項演算子を配列で置き換える - Qiita,入手先 https://qiita.com/piruty/items/029ae8cf42afa5fe4ad7
- javascript - Convert boolean result into number/integer - Stack Overflow,入手先 https://stackoverflow.com/questions/7820683/convert-boolean-result-into-number-integer