私は、多くの場合、x
を繰り返し続けるために冗長思わ英語でPythonの場合、x == 1またはx == 5またはx == 10の場合、aを書くいくつかの他の方法は何ですか?
if x == 1 or x == 5 or x == 10 or x == 22 :
pass
のようなコードを書いてしまうと、そのようなif文を書くためのより簡単またはより短い方法はありますか?
多分x
の値がタプル(1, 5, 10, 22,)
なのかどうかチェックしていますか?
私は、多くの場合、x
を繰り返し続けるために冗長思わ英語でPythonの場合、x == 1またはx == 5またはx == 10の場合、aを書くいくつかの他の方法は何ですか?
if x == 1 or x == 5 or x == 10 or x == 22 :
pass
のようなコードを書いてしまうと、そのようなif文を書くためのより簡単またはより短い方法はありますか?
多分x
の値がタプル(1, 5, 10, 22,)
なのかどうかチェックしていますか?
はい、あなたはタプルでもセットでも(このチェックが繰り返し行われた場合は)正しいです。
あなたは、多くの場合、このチェックを行うと、値の数が十分に大きい、
myset = set((1, 5, 10, 22))
[...]
if x in myset:
pass
myset
ものはより便利、より多くの値あなたですのであればどちらかが、
if x in (1, 5, 10, 22):
pass
を行いますか、確認したい4値は非常に少ないので、簡単に保つことができます。 400の値を使用する必要があります。
Marcinが指摘しているように、リスト内のルックアップに必要なハッシングは、リストやタプルを目的の値で直線的に検索するよりも高価です。
Python 2.7/3. *では、set literal: '{1、5、10、22}'を使うこともできます。 Python 3.2以降では、 'in'チェック(変数に結果を保存しているのではないにしても)を行うのであれば、これは透過的に' frozenset'を使うように最適化します。 – Dougal
+1を最初に提案するには、私はDougalに同意する必要があります可能であれば新しい構文を使用する必要があります。 –
'set((1,5,10,22))'は '{1、5、10、22}'よりも多くのバージョンで動作し、実際にはもっと読みやすいIMHOではありません。 – martineau
あなたは、コレクションでin
を使用することができます。これは新しいリストに行が実行されるたびに作成されます
if x in [1, 5, 10, 22]:
# etc...
if x in {1, 5, 10, 22}: # New syntax for creating sets
# etc...
注こと。効率が懸念される場合は、コレクションを1回作成して再利用してください。
あなたが良好な性能を必要とセット使用し、同じ比較を数回繰り返ししようとしている場合:
s = frozenset([1, 5, 10, 22]) # at the beginning
if x in s: # in your code
pass
もちろん、小さなデータセットの場合、タプルが速くなる(ハッシュ処理が不要で、データ構造が単純化され、衝突リスクがない)、Python 3.2では、この最適化を無償で行うことができます(frozensetは1回だけ作成されます)if条件内でセットリテラルを使用します。また、すべてのパフォーマンスの問題と同じ条件と条件:(1)これを最適化する必要があるかどうかを測定します。 (2)もう一度#2! (3)本当ですか? (4)まあ、大丈夫です!あなたの選択肢を集めて、それをよくベンチマークしてください。 – delnan
'frozenset'を作成するのは、通常の' list'と 'set'を作るよりも速いのですか? – George
うんを、 '[1、50、10、22]でxは'書き込みが簡単であれば私が書いたように、 –