[解決済み] コンパクトな書き方 (a + b == c または a + c == b または b + c == a)
質問
よりコンパクトに、あるいは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 つの加算と比較のみが行われます。
関連
-
[解決済み] 複数の例外を1行でキャッチする(ブロックを除く)
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] AndroidでPythonを実行する方法はありますか?
-
[解決済み] 文字列にゼロを埋め込むには?
-
[解決済み] Python 3で文字列をバイトに変換する最良の方法?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python Decorator 練習問題
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み] 'int'オブジェクトに'__getitem__'属性がない。
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない