私はしばしば次のようなコードを書くことになります
if x == 1 or x == 5 or x == 10 or x == 22 :
pass
英語では繰り返し続けるx
のは冗長に思えますが、そのようなifステートメントを書き出すためのより簡単なまたはより短い方法はありますか?
x
タプルなどにの値の存在を確認しているのでは( 1, 5, 10, 22, )
ないでしょうか。
私はしばしば次のようなコードを書くことになります
if x == 1 or x == 5 or x == 10 or x == 22 :
pass
英語では繰り返し続けるx
のは冗長に思えますが、そのようなifステートメントを書き出すためのより簡単なまたはより短い方法はありますか?
x
タプルなどにの値の存在を確認しているのでは( 1, 5, 10, 22, )
ないでしょうか。
はい、あなたは正しいです-タプルまたは(このチェックが繰り返し行われる場合)セットのいずれかです。
だからどちらか
if x in (1, 5, 10, 22):
pass
または、このチェックを頻繁に行い、値の数が十分に多い場合は、
myset = set((1, 5, 10, 22))
[...]
if x in myset:
pass
内容が便利であるほど、myset
チェックする値が多くなります。4つの値はかなり少ないので、単純に保つことができます。400の値とあなたはセットを使用する必要があります...
Marcinが指摘しているように、もう1つの側面は、セット内のルックアップに必要なハッシュです。これは、リストまたはタプルで目的の値を線形検索するよりもコストがかかる場合があります。
コレクションで使用できます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