1. ホーム
  2. python

[解決済み] コンパクトな書き方 (a + b == c または a + c == b または b + c == a)

2022-06-12 11:45:58

質問

よりコンパクトに、あるいはpythonicにブール式を記述する方法はありますか?

a + b == c or a + c == b or b + c == a

を思いつきました。

a + b + c in (2*a, 2*b, 2*c)

となっていますが、これはちょっとおかしいですね。

どのように解決するのですか?

PythonのZenに注目すると、強調されています。

Pythonの禅、Tim Peters著

美しいことは醜いことよりも良いことだ。

明示は暗黙にまさる。

単純なものは複雑なものよりも優れています。

複雑なものは複雑でいい。

フラットな方が入れ子より良い。

密よりも疎の方が良い。

読みやすさは重要です。

特殊なケースは、ルールを破るほど特殊ではない。

実用性は純粋性に勝るが。

エラーは決して無言で通過してはならない。

明示的にサイレンスにしない限り

曖昧さを前にして、推測の誘惑を拒否する。

それを行うには、1つの--できれば1つだけの--明白な方法があるはずです。

その方法は、あなたがオランダ人でない限り、最初はわからないかもしれませんが。

今が一番いいんです。

とはいえ、決してない方がいいことが多いのですが
正しい 今すぐにでも。

実装が説明しにくいなら仕方ない。

実装が説明しやすいのであれば、良いアイデアかもしれません。

名前空間はとても素晴らしいアイデアです。

最もPythonicな解決策は、最も明確で、最も単純で、最も説明しやすいものです。

a + b == c or a + c == b or b + c == a

さらに良いことに、このコードを理解するのにPythonの知識は必要ありません それは その 簡単です。これは遠慮なく、最良の解決策です。それ以外のものは、知的な自慰行為です。

さらに、これは、すべての提案の中で唯一短絡するものであるため、おそらく最も性能の良い解決策でもあるのです。もし a + b == c の場合、1 つの加算と比較のみが行われます。