[解決済み] 複数の変数が1つの値に対して等しいかどうかをテストするには?
質問
複数の変数を整数で比較し、3文字の文字列を出力する関数を作ろうとしています。これをPythonに翻訳する方法はないかと考えていました。つまり、次のように言います。
x = 0
y = 1
z = 3
mylist = []
if x or y or z == 0 :
mylist.append("c")
if x or y or z == 1 :
mylist.append("d")
if x or y or z == 2 :
mylist.append("e")
if x or y or z == 3 :
mylist.append("f")
というリストを返すことになる。
["c", "d", "f"]
このようなことは可能でしょうか?
どのように解決するのですか?
あなたはブール式の仕組みを誤解しています。ブール式は英文のようには機能せず、ここではすべての名前について同じ比較を話しているのだと推測してください。あなたは探しているのです。
if x == 1 or y == 1 or z == 1:
x
と
y
はそれ自体で評価されます (
False
もし
0
,
True
それ以外の場合)。
に対する封じ込めテストを使って短くすることができます。 タプル :
if 1 in (x, y, z):
とか、もっといいのがあります。
if 1 in {x, y, z}:
を使って
a
set
を利用して、定価制のメンバーシップテスト(つまり
in
は、左側のオペランドが何であれ、一定の時間を必要とします)。
説明
を使用する場合
or
Pythonは演算子の各辺を
セパレート
の式で表されます。式は
x or y == 1
に対するブーリアンテストとして扱われます。
x
であり、それがFalseであれば、式
y == 1
がテストされます。
によるものです。
演算子の優先順位
. その
or
演算子の優先順位は
==
テストでは、後者が評価されます。
最初
.
しかし、これが仮に
ない
という表現がある場合、その
x or y or z == 1
と解釈され、実際には
(x or y or z) == 1
このような場合、やはり期待するような動作はできません。
x or y or z
は、最初の引数が'truthy'であれば、評価されます。
False
であったり、数値の0であったり、空であったりします。
ブール式
Pythonがbooleanコンテキストで何をfalseとみなすかについての詳細はこちら)。
つまり、値については
x = 2; y = 1; z = 0
,
x or y or z
は、次のように解決します。
2
なぜなら、それが引数の中で最初の真に近い値だからです。次に
2 == 1
となります。
False
にもかかわらず
y == 1
となります。
True
.
逆も同様で、1つの変数に対して複数の値をテストすることになります。
x == 1 or 2 or 3
も同じ理由で失敗します。使用方法
x == 1 or x == 2 or x == 3
または
x in {1, 2, 3}
.
関連
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み] リスト内の項目を1つの文字列に連結するには?
-
[解決済み】Pythonで辞書のキーをリストとして返すには?
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
ピロウズ画像色処理の具体的な活用方法
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。